Git에서 한 브랜치에서 다른 브랜치로 병합하는 방법은 Merge이고, 다른 하나는 Rebase다.
experiment(c4)와 master(c3)을 합치는 가장 쉬운 방법은 git merge master이다. 두 브랜치의 마지막 커밋(c3, c4)와 공통 조상(c2)을 사용하는 3-way Merge로 새로운 커밋을 만들어 낸다.
c3에서 변경된 사항을 Patch로 만들고 이를 c4에 적용시키는 방식을 rebase라고 한다. 이 명령으로 한 브랜치에서 변경된 사항을 다른 브랜치에 적용할 수 있다.
즉, 다른 base tip 위에 커밋을 재 적용하는 것이다.
또, 여러개의 커밋을 하나로 합쳐 줄 수 있다.
작업을 하다보면 다른 브랜치로 이동해야 할 일이 생길때가 있는데, 잠시 임시 저장 용도로 commit을 하게된다. 그대로 push하게 되면 커밋로그가 너무 지저분하므로 이 커밋들을 하나로 깔끔하게 합칠때도 git rebase를 사용한다.
git rebase -i main
-i
옵션을 추가하면 대화형 모드로 rebase할 수 있다.
main을 기준으로 rebase 한다. 혹은 합치려는 n개의 커밋 이전으로 rebase한다.
가장 오래된 커밋(first commit)을 pick으로 두고 나머지는 s(squash)한다.
커밋 메시지를 정리한다.
커밋 로그 확인 후 잘 합쳐졌다면 브랜치에 push하거나, 다음 작업을 이어간다.
4-1. 이미 이전에 원격 저장소에 push한 적이 있으면 -f로 force push한다.(내 커밋 내용으로 덮어씌우는 위험부담이 따르므로 신중히 사용해야 한다.)
여러개의 커밋을 한번에 rebase를 하는것은 위험부담이 따르므로 되도록이면 커밋 로그가 3-4개 쌓여있을 때 rebase를 해주는것이 정신 건강에 좋다.
git pull origin main
git rebase -i main
git add .
git rebase --continue
4-1. 이미 이전에 원격 저장소에 push한 적이 있으면 -f로 force push한다.(내 커밋 내용으로 덮어씌우는 위험부담이 따르므로 신중히 사용해야 한다.)