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가 없으면 지저분해서 히스토리를 읽을 수가 없다.