06. rebase
rebase는 서로 다른 브랜치를 하나로 합치는 기능을 한다. 그렇다면 같은 기능을 하는 merge와 어떤 차이점을 보이는지 살펴보자.
먼저 다음과 같은 commit 기록이 있다.
D라는 새로운 commit과 새로운 branch에서 E라는 commit이 만들어졌고, 이를 merge하여 M이라는 commit으로 합쳐졌다.
하지만 rebase를 하게 될 경우 마치 E라는 commit이 없었던 것처럼 동작하게 된다.
conflict에서 살펴봤듯이 merge를 할 때는 base가 중요한 요소로 작용한다. 즉, rebase는 말 그대로 base commit을다시 지정하는 것이다.
사용
git branch dev
git branch merge-test
git checkout merge-test
git commit -m "plant edit 1"
git commit -m "plant edit 2"
git commit -m "plant edit 3"
git checkout dev
git merge --squash merge-test
git commit -m "Merge branch 'merge-test' into dev"
master branch에서 dev branch를 만들고, dev branch에서 merge-test branch를 만들어 3번의 commit 후 dev branch로 merge한 결과다. 사진에서처럼 모든 commit 내역이 그대로 남아있다.
똑같은 작업을 rebase를 통해 진행해보자.
git rebase <base branch> <topic branch>
git rebase merge-test
두 줄의 commit history가 하나로 합쳐졌다. 즉 하나의 base에서 온것처럼 만들어진 것이다.
언제 사용할까?
rebase를 사용하면 history를 간략하게 정리할 수 있다는 점에서 장점이 있고, base를 재정의하기 때문에 불필요한 conflict를 방지할 수도 있다. 하지만 기록은 언제나 중요하다. 각 기록은 모두 의미를 가지기 때문에 함부로 변경해서는 안된다.
따라서 로컬에 존재하는 private한 branch에서는 사용해도 좋지만 remote에 존재하는 branch와 main branch에서는 주의하여 사용하자!
rebase는 base를 재정리하는 작업이고, conflict는 base의 영향을 받기 때문에 항상 주의해야한다.
rebase 어렵다.. 나중에 재정리가 필요할듯 #재정리