Git
Rebase
최-코드
2024. 8. 12. 17:10
git rebase <branch>
- 커밋 히스토리를 다시 쓰는 기능이다. 뒤에 병합할 브랜치를 적으면 된다.
- 사용 이유 : git merge를 통해 두 브랜치를 병합하면 하나의 브랜치에서 계속적으로 머지 커밋이 발생하게 되어 해당 브랜치에 대한 주요 커밋을 보기 어려워진다.
- 결과 : master에 대해 merge를 했다고 했을 때 rebase를 통해 두 개의 브랜치를 합치면, master에 대한 커밋 내역을 하나로 모아 끝나면 이후 특정 브랜치에 대한 커밋이 쭉 이어진다. 또한 머지 커밋이 사라진다. 따라서 커밋 히스토리가 깔끔해진다.
- 정리하자면, 브랜치를 리베이스한다는 것은 다른 브랜치의 끝을 현재 브랜치의 시작점으로 만들겠다는 소리이다. 이 때 현재 브랜치의 커밋들은 재생성된다.
- 추가) 마스터끼리 모아 놓고(재생성X, base는 재생성 안 됨), rebase하여 새로 생긴 커밋은 master에 대해 최신 정보를 가지고 있는 커밋들로 재생성된다. 이 때 master는 마찬가지로 오직 master가 가진 커밋만 볼 수 있는 형태이다.
git rebase 사용하면 안 되는 순간 : A브랜치로 푸쉬한 내역을 다른 개발자가 가져갔을 때 rebase를 진행하면 안 된다. 왜냐하면 커밋이 재생성되기 때문에 내가 가지고 있는 커밋을 이미 가져간 커밋엔 없고, 이미 가져간 커밋은 내가 가지고 있지 않게 된다. 따라서 수습하기 어려워진다. 즉, 다른 사람들에게 없는 커밋에 대해서만 git rebase를 수행해야 한다.
git rebase 충돌 해결 : git merge와 같이 충돌이 발생했을 때 같은 표시가 뜬다. 대신 충돌을 해결하고 add하고 commit대신에 git rebase --continue 명령어를 실행해야 한다. rebase가 실행되다가(충돌이 없는 커밋은 재생성 완료) 멈춘 상태이기 때문이다.