난 소스 형상관리를 할 때 커밋메시지나 커밋 히스토리같은 부분에 신경을 많이 쓰는 편이라 자연히 rebase
를 많이 사용하는데 rebase를 하면 머지(merge) 커밋("Merge branch.."라고 나오면서 브랜치를 non-fast-forward로 머지할 때 자동으로 생기는 커밋) 커밋이 사라진다. 좀 더 정확히 얘기하면 rebase를 할 때 변경되는 커밋가운데 머지 커밋이 있으면 사라진다.
위와 같이 master
브랜치에서 feature/somthing
브랜치(앗! 오타가!)를 만들어서 커밋을 하고 다시 머지를 한 히스토리가 있다. 여기서 커밋메시지가 4th
라고 되어 있는 c4a9504
커밋을 수정하려고 git rebase -i c4a9504^
를 실행하면 히스토리가 다음과 같이 변경된다.(여기서는 rebase 인터렉티브 모드를 사용했지만 일반적인 rebase도 같다.)
4th
를 new 4th
로 바꾸었는데 rebase를 수행할 때 머지 커밋은 제외하고 다시 커밋하므로 머지 커밋이 히스토리에서 사라졌다.
실제로 위처럼 rebase 편집화면에서도 머지 커밋은 나타나지 않는다. 직선 히스토리 라인을 좋아한다면 상관없지만 때로는 머지커밋을 의도적으로 남기고 싶을때도 있다. 이럴 때를 위해 git은 --preserve-merges
라는 옵션을 제공한다.
다시 맨 위에 본 히스토리에서 git rebase -i --preserve-merges c4a9504^
와 같이 --preserve-merges
옵션을 사용하면...
rebase 편집화면에서도 머지커밋(47dc154
)이 나타나는 것을 볼 수 있다.
이렇게 하면 위처럼 rebase 후에도 머지 커밋이 그대로 유지할 수 있다.
마지막에 오타가 수정될줄 알았는데 ..;; 낚였;;
new 4th 로 아쉬움을 달랫;;
브랜치명을 갑자기 수정하면 헷갈릴까봐.. ㅡㅡ;;