티스토리 뷰
base
rebase라는 개념을 알기 위해서는 우선 base의 개념을 짚고 넘어 가야 한다.
base란 예를 들어 a브랜치에서 새로운 브랜치 B가 생성되었을 경우 B 브랜치가 생성되는 곳인 a브랜치의 최신 버전을 의미한다.
위처럼 b 브랜치가 생성되었을 때 b 브랜치의 base는 a3라는 것이다.
rebase
A 브랜치에서 생겨난 B브랜치가 있을 때 b브랜치의 base를 a브랜치의 최신 버전으로 바꾸는 것을 의미한다.
B브랜치를 보면 a브랜치의 최신버전 위에 B브랜치의 최신버전이 놓여있는 것을 다음 이미지처럼 확인할 수 있다.
즉 B브랜치의 base였던 a3가 이제 a4로 바뀐 것이다.
B브랜치를 rebase를 할 경우 베이스가 바뀔 브랜치인 B브랜치에 위치한 다음(B로 checkout한다.) git rebase 새로운 base가 있는 브랜치(여기서는 A브랜치)을 입력한다.
이를 통해 rebase가 완료된다.
한편 이때 충돌이 일어나서 rebase를 실패할 경우 다음과 같이 해결할 수 있다.
1. 우선 충돌난 부분을 수정해준다.
2. add를 해준다.
3. git rebase --continue
merge의 경우 충돌이 나면 충돌난 내용을 수정 후 add 및 커밋을 했다.
그러나 rebase는 add 후 git rebase --continue로 중단된 rebase를 이어가면 된다.
4. 그럼 이제 rebase가 완료된다.
5. rebase 후 B브랜치를 생성한 A브랜치를 B브랜치의 최신 버전과 같이 최신화를 시키기 위해 fast-forward시키는 방법은 다음과 같다.
git checkout a
git merge rebase를 한 브랜치명 #여기선 b브랜치
git pull --rebase와 git pull
git pull --rebase는 도대체 git pull과 뭐가 다를까?
git pull <원격 저장소 별명><리모트 브랜치명>은 원격 저장소로부터 새로운 커밋을 내려받는 것만을 의미한다.
git pull --rebase <원격 저장소 별명><리모트 브랜치명>는 git fetch 와 git rebase <원격 저장소 별명><리모트 브랜치명> 이 두 명령을 직접 순서대로 실행한다는 의미이다.