A 브랜치를 분기 후 커밋을 쌓는다.
그러다 A 브랜치 작업을 잠시 멈추고, B 브랜치를 작업 후 머지했다.
이후에 다시 A브랜치 작업을 마무리하고 머지하려고 한다.
이 때 B 브랜치에서 작업한 내용을 반영하고 싶다면 Rebase를 사용할 수 있다.
브랜치를 분기 후 커밋을 쌓는다.
그런데 내가 분기한 시점 이후에 머지하려는 브랜치에 동료의 커밋이 업데이트 되어있다.
이 때 동료의 커밋 내역을 내 브랜치에 반영하고 싶다면 Rebase를 사용할 수 있다.
base를 옮기려는 브랜치에 checkout 한 후 git rebase {branch name}
를 실행하면 현재 브랜치의 커밋들이 순서대로 하나씩 옮겨진다.
바로 Successfuly rebased 메시지가 나오며 Rebase가 완료된다.
해당 커밋의 충돌을 해결해야만 다음 단계로 넘어갈 수 있다.
다음 단계란?
1. 다음 커밋의 rebase 진행
2. rebase complete (더이상 rebase할 커밋이 없을 때)
해결 방법은 다음과 같다.
1 .해당 파일에 가서 충돌을 해결
2. 해당 파일들의 변화를 staging (ex. git add .
)
3. git rebase --continue
를 입력하면 해당 커밋의 메세지를 수정하는 단계로 넘어간다.
4. 커밋 메세지 수정
5. 다음 단계로
git rebase --abort
abort의 뜻은 '중단시키다' 이다.
rebase의 충돌 해결 진행 중에 무언가 꼬였거나 되돌려야 할 때 abort를 하게 되면, 모든 변경사항을 버리고 rebase를 시작하기 전의 상태로 되돌아 온다.
rebase의 기본적인 기능인 base를 옮기는 기능에 대해서 다루었다.
하지만 rebase에는 interactive(-i)라는 무시무시한 기능이 또 있다.
개인적으로 rebase와 rebase -i는 아예 다른 기능이라고 생각한다.
interactive 사용법에 대해서도 추후에 포스팅 할 계획이다.
rebase 기능은 생각보다 쓰기 편하고 쉬운 기능이다.
처음엔 익숙하지 않겠지만, 실수했을 때 되돌리는 방법이 충분히 있다.
그러니 commit을 다루는 것에 대한 두려움이 있더라도 연습을 하다보면 금방 익숙해질 수 있을 것이다.