Git에서 다른 브랜치와 내용을 합칠때 항상 merge와 rebase로 합치는것을 고민한다. 왜냐하면 그 차이를 잘 모르고 있었기 때문이다.
단순히 merge는 merge 커밋만 남고 rebase는 이런 커밋 없이 깔끔하게 합칠수 있다는 정도만 알고 있는 수준이었다. 그래서 이러한 두 병합 방법에 대한 차이와 기능에 대해서 상세히 살펴 보려고 한다.
위와 같은 커밋 상태가 존재한다고 할 때, Feature
브랜치를 Master
브랜치에 Merge 해보려고 한다.
위의 그림은 두 브랜치를 Merge 한 결과이다. 마지막 커밋인 C6과 C4 모두를 가리키는 C7이라는 Merge 된 결과를 담는 커밋이 생성된다.
위와 같은 커밋을 이번에는 Rebase 해보자.
git checkout Feature
git rebase Master
위의 그림은 두 브랜치를 Rebase 한 그림이다. Rebase를 통해서 Master에 존재하는 커밋을 합칠 수 있다.
Rebase는 Feature에서 변경된 커밋 사항들을 차례로 확인해 순차적으로 합친다.
두 브랜치가 나뉘기 전인 C3
라는 공통 커밋으로 이동하고, 그 커밋 부터 현재 Checkout 된 브랜치(Feature
)가 가리키는 커밋(C6
)까지 diff를 차레로 만든다. 그리고 합칠 브랜치인 Master의 커밋(C4
)을 가리키게 하고 C5와 C6의 커밋을 차례대로 적용한다. 그렇게 되면 위와 같은 그림을 보여주게된다.
git checkout Master
git rebase Feature
그 후에 Master 브랜치를 Fast-forward 시켜주면면 된다.
https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0