끝나지 않는 git의 세계
Git rebase 란?
변경되는 내용을 병합할 때 사용하는 것으로, 두 개의 공통 base를 가진 branch에서 한 branch의 base를 다른 branch의 최신 커밋으로 branch의 base를 옮기는 작업 입니다.
git merge의 문제
- 불필요한 merge commit을 생성한다.
- 복잡한 프로젝트 history를
git rebase
- 불필요한 merge commit 생성X
- 같은 작업을 한 commit끼리
- 기존의 commit들 뒤로 rebase commit이 붙는다.
- commit의 고유 번호가 달라짐
주의❗️conflict는 commit사이 사이에서 일어나는 작업 내용 사이의 충돌이므로 여러 개의 커밋이 한번에 충돌 날 수 있다.
squash
- commit 흐름을 방해하는 commit message를 정리한다.
rebase하는 방법
새로운 작업을 모두 마치고 push하기 전
- main branch 로 이동하여 remote main을 pull 받는다.
- 내가 push 할 feature branch 로 이동한다.
git rebase -i main
를 진행한다
rebase 하는 동안 squash 진행 할 때
- 가장 오래된 commit을 pick 한다.
- 다른 커밋 메세지는 가장 오래된 commit을 기준으로 squash 한다.
- 다른 커밋의 작업 내역이 없어지는 것이 아닙니다.
- Esc -> :wq 로 창에서 빠져나온다
수정용 에디터에서 최종 commit 내용 작성
- 현재까지 적은 커밋 메세지가 전부 나타난다.
- 불필요한 내용을 제거하고 현재 수정 내역에 대한 커밋 메세지를 정
성껏 작성한다.
- Esc -> :wq 저장하고 에디터에서 빠져나온다.
rebase 성공!
- git log로 정리된 commit 내역을 확인한다.
git push origin feature/login -f
-f 옵션을 사용하여 force push를 진행한다.
rebase 중 conflict 해결하기
- 먼저, 충돌이 일어난 코드를 수정한다.
git add .
(git commit은 하지 않는다. 수정 사항이 없으니까)
git rebase --continue
를 진행한다.
- 멈춰 있던 rebase가 진행된다.
- 충돌이 여러번 나면 그때마다 충돌을 해결하고
git add .
git rebase --continue
를 반복한다.
- 계속 해결이 안된다면,
git rebase --abort
로 아예 rebase를 진행하기 전으로 돌아 갈 수 있다.