rebase 명령은 주로 로컬 브랜치를 깔끔하게 정리하고 싶을 때 사용한다.
rebase를 할 경우 대상 브랜치 가지의 내용들 위에, HEAD의 가지 아래 부모 커밋부터 하나씩 세운다.
즉, 2가지의 가지에서 하나의 가지로 변한다.
원격에 푸시한 브랜치를 rebase할 때는 조심해야 한다.
여러 Git 가이드에서 원격 저장소에 존재하는 브랜치에 대해서는 rebase를 하지 말 것을 권고한다. (로컬에서 수정 시에만 할 것을 권장)
그 이유는 트리의 모양이 갑자기 변하면서 다른 사용자들과 다른 모양의 트리로 모습을 하면서 꼬이는 현상이 발생하기 때문이다.
Git Bash 명령어 이해해보자.
먼저 newBranch로 HEAD를 바꾸겠다.
그 후 git rebase master로 master 위에다가 newBranch의 커밋들을 하나씩 쌓으려고 한다.
그런데 충돌 오류가 발생했다.
보면 이전 글에서 Merge 했을 때와 동일하게 충돌 오류가 발생했으므로 해결해서 저장해보자.
그 후 git rebase --continue 명령어를 통해 진행하면 된다.
Merge와 다르게 바로 commit이 아닌 git rebase --continue를 하는 이유는 부모 commit부터 하나하나씩 대상 브랜치위에 쌓기 때문에 continue로 가지가 모두 쌓아질 때까지 진행되어야 한다.
이 때 충돌이 계속 발생할 수 있다. 이를 계속 고쳐주면서 해당 명령어를 진행해줘야 한다.
그럼 문제없이 rebase가 될 것이다.
Rebase 원리
1. HEAD와 대상 브랜치의 공통 조상을 찾는다.
2. (HEAD의) 공통 조상 이후에 생성한 커밋들을 대상 브랜치 뒤로 재배치한다.