Merge
- 초기 상황이다.
-
git merge iss1
명령으로 iss1를 Merge한다. -
노란색인 C1은 Merge Base이다.
git merge iss2
명령으로 iss2를 Merge한다.
git merge iss3
명령으로 iss3를 Merge한다.
-
iss1, iss2, iss3를 Merge 했다.
-
C9, C10, C11은 Merge 커밋이다.
-
그림에서는 히스토리가 복잡하지 않다고 생각 할 수 있지만
-
콘솔에서 보게 된다면 그렇지 않다.
Rebase
-
git checkout iss1
과git rebase master
를 차례대로 실행해서 Rebase 한다. -
그러면 Merge Base가 C1이 아니라 C4가 된다.
-
git checkout master
과git merge iss1
를 차례대로 실행해서 Merge한다. -
Rebase를 하면 항상 Fast-Forward Merge가 가능해진다.
-
git checkout iss2
과git rebase master
를 차례대로 실행해서 Rebase한다. -
그러면 Merge Base가 C3가 아니라 C2’가 된다.
-
git checkout master
과git merge --no-ff iss2
를 차례대로 실행해서 Merge한다. -
–no-ff 옵션은 강제로 Merge 커밋을 남기려고 주는 것이다.
-
git checkout iss3
과git rebase master
를 차례대로 실행해서 Rebase한다. -
그러면 Merge Base가 C3에서 C9이 된다.
git checkout master
과git merge --no-ff iss3
를 차례대로 실행해서 Merge한다.
- 이제 Rebase 결과를 Merge한 결과와 비교해보자.
-
Rebase를 하고 나서 Merge한 것이 훨씬 보기 좋다.
-
아무리 복잡한 과정을 거쳤어도 한눈에 들어오게 할 수 있다.
-
정리하자면 Rebase는 히스토리를 정리하는 데 필요하다.
-
나 혼자 쓰는 저장소에서도 Rebase가 없으면 지저분해서 히스토리를 읽을 수가 없다.