Git merge란?
- 코드 변경 사항들을 담은 하나의 브랜치를 다른 브랜치로 통합시키는 명령어
- 커밋 기록들은 브랜치에 시간순서대로 남겨진다
- 장점
- git merge <코드 변경사항들이 담긴 branch명> 이 명령어 단 한줄로 대상이 되는 브랜치로 통합이 가능해 간단하다
- 단점
- merge시 마다 불필요한 merge 커밋을 생성하여 프로젝트 규모가 커질수록 branch history가 지저분해지기 쉽다
- 여러 작업들과 커밋들이 합쳐지고 사이사이 결합되면서 내역 구분이 어려워진다
Git rebase란?
- git merge 같은 브랜치 병합 명령어
- 브랜치 병합시 현재 내 커밋의 베이스를 병합 대상 브랜치의 맨 끝 커밋으로 재조정하여 커밋 히스토리를 시간순이 아닌 작업 단위로 확인 가능
- git merge와 달리 merge 커밋이 없다
- rebase 주의사항
- 같은 브랜치에서 rebase 할 때마다 commit history 가 달라질 수 있다. 수정사항이 추가로 생긴 후, 다시 rebase 하면 history가 무조건 달라지는데, git은 history가 다른 브랜치의 푸시 허용 x
- 이 문제 해결을 위해 force push
- git push origin feature/login -f
- 예시
- rebase 전
- develop : (a) - (b) - (c) -
- feat/one : --------------L _ (d) - (e)
- feat/two : --------------L _ (f) - (g)
- feat/one과 develop 브랜치 병합 후
- develop : (a) - (b) - (c) - (d) - (e) -
- feat/two :---------------L _ (f) - (g)
- feat/two rebase 한 후
- develop : (a) - (b) - (c) - (d) - (e) - (f) - (g)
Git squash란?
- git commit 들 중 하나로 합쳐도 될 것 같은 공통된 내용을 가진 커밋들을 하나의 커밋으로 통합해주는 기능
- 명령어
- git rebase -i develop : -i 라는 명령어를 통해 하나의 창이 띠워지며 여기서 squash 기능을 통해 여러 커밋들을 하나의 커밋으로 합쳐 rebase 할 수 있게 된다