로컬에서 A저장소를 클론해서 B저장소를 새로 만들었는데, B는 A에서 pull만 해 오고, 역으로 B에서 A로 push는 할 수 없게 막으려면:
git config remote.origin.receivepack /bin/false
로 설정
로컬에서 만든 저장소를 다른 곳에 복사하고 싶을 때 (로컬로 복사해오는 건 clone으로 하지만 그 반대 방향을 원할 때):
git remote add origin git@github.com:foo/bar.git git push origin master
현재 작업 브랜치에서 작업 중인데 버그를 발견. 이 버그는 다른 브랜치에서 해결하고, 다시 작업 브랜치에 반영하고 싶은 경우:
저장소 안에 여러 폴더가 있는데, 그 중 한 폴더를 빼내어 별도의 저장소로 만들면서 기존 히스토리까지 유지하고 싶은 경우:
플랫폼에 따라 달라지는 개행문자 변환
원격 저장소에 http로 접속할 때, 커밋하는 양이 많으면 git push 할 때 HTTP 411 코드 에러가 난다. 설정에서 최대값을 올려줌
git config http.postBuffer *bytes*
마지막 커밋 이후에 파일 하나에 생겨난 여러 수정 내역 중에 일부만 커밋하고 싶을 때
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
다른 브랜치에 있는 파일 하나만 가져오고 싶을 때
git checkout B file
로컬 브랜치와 리모트 브랜치 삭제
가장 최근에 발생한 여러 커밋을 일괄 취소하고 싶을 때
특정 커밋 이전 히스토리를 지우고 싶을 때 (예를 들어 github에서 받은 프로젝트에 내가 이런 저런 커밋을 했는데 git log를 하면 원래 있던 커밋들도 와르르 나오니까 내가 받아온 시점을 첫 커밋으로 만들고 그 이전은 전부 삭제)
# A커밋 이전의 커밋들을 삭제하고 싶음 $ git checkout --orphan temp A $ git commit -m "Truncate history" $ git rebase --onto temp A master
첫번째 커밋을 리셋하고 싶을 때
git update-ref -d HEAD
로컬 저장소에서 한 파일에 '특정한 변경' 부분만 따로 유지하되, 원격으로 push할 때 전달되지 않게 막고 싶은 경우: