잡다한 사례나 문제 해결에 관한 것들. 구글링하다 발견한 걸 옮겨 둠.
1. 이럴 땐 이렇게
로컬에서 A저장소를 클론해서 B저장소를 새로 만들었는데, B는 A에서 pull만 해 오고, 역으로 B에서 A로 push는 할 수 없게 막으려면:
로컬에서 만든 저장소를 다른 곳에 복사하고 싶을 때 (로컬로 복사해오는 건 clone으로 하지만 그 반대 방향을 원할 때):
git remote add origin git@github.com:foo/bar.git
git push origin master
현재 작업 브랜치에서 작업 중인데 버그를 발견. 이 버그는 다른 브랜치에서 해결하고, 다시 작업 브랜치에 반영하고 싶은 경우:
저장소 안에 여러 폴더가 있는데, 그 중 한 폴더를 빼내어 별도의 저장소로 만들면서 기존 히스토리까지 유지하고 싶은 경우:
플랫폼에 따라 달라지는 개행문자 변환
원격 저장소에 http로 접속할 때, 커밋하는 양이 많으면 git push 할 때 HTTP 411 코드 에러가 난다. 설정에서 최대값을 올려줌
마지막 커밋 이후에 파일 하나에 생겨난 여러 수정 내역 중에 일부만 커밋하고 싶을 때
- 예를 들어 a.pl 파일에 새 기능을 추가하다가 다른 지점에서 버그를 발견해서 그것도 고쳤는데 버그 수정 부분만 먼저 커밋하고 싶은 경우
-
git add --patch
$ git diff
diff --git a/develop.txt b/develop.txt
+patch 1 <-- 요것만 커밋하고 싶다
develop branch 1
develop branch 2
+patch 2 <-- 요건 놔두고
$ git add --patch develop.txt <-- patch 옵션
@@ -1,2 +1,4 @@
+patch 1
develop branch 1
develop branch 2
+patch 2
Stage this hunk [y,n,q,a,d,/,s,e,?]? s <-- 한 덩어리에서 더 쪼개기 위해 's'plit
Split into 2 hunks.
@@ -1,2 +1,3 @@
+patch 1
develop branch 1
develop branch 2
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? y <-- 내가 원하는 것만 인덱스에 올리고
@@ -1,2 +2,3 @@
develop branch 1
develop branch 2
+patch 2
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? n <-- 이건 패스
$ git diff --cached
@@ -1,2 +1,3 @@
+patch 1 <-- 인덱스에 이 줄만 올라왔다
develop branch 1
develop branch 2
다른 브랜치에 있는 파일 하나만 가져오고 싶을 때
- A브랜치에서 작업 중인데, B브랜치에 있는 버전의(또는 B브랜치에만 있는) 파일을 가져오고 싶다. B브랜치를 체크아웃해서 파일을 다른 곳에 복사한 후 다시 A브랜치를 체크아웃해서 그 복사한 걸 가져오고...
-
git checkout B file
로컬 브랜치와 리모트 브랜치 삭제
가장 최근에 발생한 여러 커밋을 일괄 취소하고 싶을 때
특정 커밋 이전 히스토리를 지우고 싶을 때 (예를 들어 github에서 받은 프로젝트에 내가 이런 저런 커밋을 했는데 git log를 하면 원래 있던 커밋들도 와르르 나오니까 내가 받아온 시점을 첫 커밋으로 만들고 그 이전은 전부 삭제)
# A커밋 이전의 커밋들을 삭제하고 싶음
$ git checkout --orphan temp A
$ git commit -m "Truncate history"
$ git rebase --onto temp A master
첫번째 커밋을 리셋하고 싶을 때
2. 딱 부러진 해결책을 못 찾은 상태
로컬 저장소에서 한 파일에 '특정한 변경' 부분만 따로 유지하되, 원격으로 push할 때 전달되지 않게 막고 싶은 경우:
3. Commens
기타분류