프로젝트를 하면서 git rebase를 통해 어질러진 로그들을 간단히 정리할 수 있게 되었다.
rebase는 이름이 말해주듯이 브랜치의 공통조상이 되는 base를 다른 브랜치의 커밋 지점으로 바꾸는 것을 말한다.
브랜치 feature/one을 master 브랜치의 world 커밋으로 base를 옮기고 싶으면, 아래와 같이 명령어를 입력해주면 된다.
$ git checkout feature/one
$ git rebase master
그럼 이제 이 rebase를 이용하여 커밋을 깔끔하게 정리해보는 예제를 살펴보자.
프로젝트 진행 중 커밋을 여러번 쌓아 pull requests를 보내면 커밋이 여러개 있어 지저분하게 보일 수 있다.
따라서 pr 보내기 전 rebase 함으로써 커밋 이력이 하나만 있게 보낼 수 있다.
위 사진처럼 브랜치 feature/one은 커밋이 여러개 있다.
rebase해서 커밋 하나로 정리해보자.
$ git checkout feature/one
#i는 rebase를 대화형으로 진행하겠다는 옵션이다.
$ git rebase -i master
pick
squash
맨 위 커밋만 pick하고 나머진 squash 한다면 커밋 하나만 남겨지게 된다.
커밋메시지 하나만 남겨두고 :wq
하면 rebase가 완료된다.
💡 rebase 도중 conflict가 났다면 충돌을 해결한 후, 계속 진행하면 된다.
$ git add . $ git rebase --continue
$ git log --oneline --all --graph
👉 커밋메시지를 rebase로 수정한 커밋 하나만 남겨져 있는 걸 확인할 수 있다.