서로 다른 branch를 병합하는 방법으로는 merge만 있는 게 아니다. rebase를 통해 더 깔끔하게 병합이 가능하다. 공식 문서를 정독하고 rebase가 정확히 어떤 커맨드고 어떻게 쓰는지 알아보자.
해당 그림에서 master 브랜치에서 experiment 브랜치를 merge하면
C2, C3, C4를 조합한(3-way) 새로운 커밋이 생성된다. 하지만 rebase는 experiment 브랜치를 master 브랜치 뒤에 붙이고 pull하여(fast-forward) 추가 커밋 없이 두 브랜치를 병합한다.
차이점을 도표로 나타내면 위와 같다.
커밋 히스토리의 경우 merge는 단순 시간순으로 merge된 커밋을 나열하게 되면서 기존 브랜치별로 커밋 히스토리가 쌓이지 않는다.
반면에 rebase는 브랜치별로 커밋 히스토리가 쌓이면서 직관적으로 보기 더 편할 수 있다.
하지만 꼭 장점만 있는 것이 아니다. merge는 병합되는 브랜치의 변경 이력을 보존시키는 반면에 rebase는 병합되는 브랜치의 변경 이력이 사라진다. 따라서 다른 팀원과 공유하는 커밋에 대해서는 rebase는 조심히 사용해야 한다.
-i 옵션을 통해 rebase 시 여러 작업을 수행할 수 있다. 예를 들면 squash를 통해 커밋을 통합시킬 수 있다.
https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0