본문 바로가기

Git

git rebase 이해하기

branch를 하나 따서 작업한 코드를 dev나 main에 간단히 추가하려면 git merge를 쓴다.

현재 브랜치에서 추가하고 싶은 브랜치를 입력하면 된다.

current-branch > git merge target-branch

(current-branch의 내용을 target-branch에 merge 하라!)

 

그러나 merge와 비슷한 명령어로 rebase가 있는데 merge와 달리 작동 방식이 직관적이지 않아 헷갈린다.

merge를 이용하면 브랜치가 꽈배기처럼 꼬이고 불필요한 커밋 log가 남아 

git 관리를 좀 더 효율적으로 하기 위해서 rebase를 사용하는 것 같다.

이런 장점이 있는 rebase를 사용하기 위해서 쉽게 설명해보고자 한다.

 

rebase는 말 그대로 base를 다시 설정하겠다는 말이다.

가지인 branch가 뻗어나온 base, 곧 root를 다른 것으로 대체하겠다는 말이다.

 

예를 들어 브랜치 a는 '1 - 2 - 3 - 4(head)'

브랜치 b는 '1 - 2 - 5(head)'라고 하자.

2에서 갈라지고 있다.

a와 b를 비교하면 base는 2가 된다.

 

브랜치 a에서 git rebase b를 입력하면

브랜치 a의 base를 b의 끝으로 하겠다는 말이기 때문에

base인 2 뒤의 '3 - 4'를 똑 잘라 새로운 base인 5에 붙여

브랜치 a는 '1 - 2 - 5 - 3 - 4'가 된다.

 

반대로 브랜치 b에서 git rebase a를 입력하면

브랜치 b의 base를 a의 끝으로 하겠다는 말이기 때문에

base인 2 뒤의 5를 똑 잘라 새로운 base인 4에 붙여

브랜치 bsms '1 - 2 - 3 - 4 - 5'가 된다.