Merge와 Rebase는 모두 한 브랜치에서 다른 브랜치로 병합하지만, git commit history 순서에 차이가 있다.
Git Merge는 시간 순서에따라 다른 브랜치의 커밋까지 다 내가 작업하던 브랜치로 들어와 버린다.
시간 순서대로 commit 기록이 남으면,
- 불필요한 merge commit 생성
모든 feature branch마다 머지커밋이 남기때문에, 프로젝트의 규모가 크다면, 브랜치 히스토리가 지저분해지기 쉽다.
- 복잡한 history
복잡한독립된 브랜치에 로직 하나를 작성하고 수정하더라도, 다른 작업과 그 내역이 겹쳐 구분하기 어려워 집니다. 이런 상황을 프로젝트의 히스토리가 복잡하다고 표현합니다.
Git Rebase는 자신이 작업하고 있는 브랜치의 commit이 최상단으로 나타나고, 다른 브랜치들도 각각 자신의 브랜치로 묶여 commit history가 남는다.
여러개의 commit 메세지를 하나로 합치는 기능, commit이 깔끔해 질 수 있다.
git rebase -i main
을 해준다. [Add] 로그인 페이지 -레이아웃 구현 -기능 구현
이런식으로 길게 적어줘도 된다!충돌이 일어날 경우, Rebase가 진행되지도, 끝나지도 않고 도중에 멈춰있게된다.
이럴 경우,
1. 충돌에 해당하는 코드를 수정 후 git add .
2. git rebase --comtinue
를 입력하면 멈춰있던 rebase가 진행된다.
3. 충돌이 여러번 일어나면 그 때마다 충돌을 해결하고 git add .
> git rebase --continue
를 반복한다. 커밋한 만큼 오류가 날 것이다,,
4. git commit --amend
로 최상단 메세지만 남기고 다 지워주고,
5. git push origin feature/이름
해주면,
6. 또 오류가 난다? 그렇다면 git push origin +feature/이름
4. 그래도 해결이 안되면, git rebase --abort
로 rebase를 진행하기 전 상황으로 돌아갈 수 있다.