2011년 10월 5일 수요일

[Git] rebase, fetch, branch

한참 뭔가 수정하고 커밋했는데 리모트 저장소에 이미 push된 내용이 있다.

이 때, pull 해버리면 깔끔하게 한 줄로 정렬된 히스토리가 만들어지지 않는데다가, 이후 다른 사람들이 pull 혹은 cherry-pick하게 될 때 좀 더 귀찮아지는 경우가 생길 수 있다.

그러면, fetch를 하고 rebase를 해 보자.

$ git fetch
$ git log ..FETCH_HEAD
$ git rebase FETCH_HEAD
$ git log --graph

대충 이렇게......

rebase 도중 conflict가 발생하게되면 물론 수정을 해야 하지만, 동일한 파일의 동일한 위치가 수정된 경우가 아니라면 별 문제 없이 rebase가 된다.

깔끔해진 히스토리에 만족스러워하며 push 해버리자.

개인적으로는 거의 항상 임시로 작업 브랜치를 만들어서 작업하면서 rebase, cherry-pick을 이용해 push하기 전에 정리를 하는 방법을 쓰지만, 간혹 작업 브랜치 만드는 걸 잊고 작업할 때가 있다. 위 방법으로 해결할 수도 있지만, 커밋이 여러 개여서 헷갈린다면...

$ git branch -m temp
$ git checkout -f -b master origin/master
$ git checkout -f temp
$ git rebase master

뭐 이런 식으로 하는 수도...