git rebase 사용하는 방법(with squash)

devmin·2020년 3월 14일
1

git rebase는 커밋 트리를 보기 쉽게 바꾸면서 master의 변경된 사항을 미리 반영하여 PR을 올릴 때 conflict를 없애주는 역할을 합니다. 처음엔 복잡해보여서 쓰기 싫었는데, 사용하다보니 뭔가 정리도 잘 되고 보기도 좋아져서 편하더라고요.

git rebase는 브랜치를 따온 master가 변경되거나, 커밋이 2개 이상일 때 쓰면 좋습니다. 리베이스를 거치면 여러개의 커밋을 하나로 바꿀 수 있거든요.

먼저 마스터에가서 최신 마스터를 pull 해옵니다.
>>> git pull origin master

그리고나서 리베이스를 적용시킬 브랜치로 checkout을 한 후, 마스터를 대상으로 리베이스를 해줍니다.
>>> git rebase -i master

여기서 i는 인터랙티브 모드로 리베이스 설정을 쉽게 할 수 있도록 도와줍니다.

그러면 아래의 화면으로 넘어갑니다. 현재 두 개의 커밋(4252b1f, fda7edd)이 존재하고, 이 커밋들을 하나로 합쳐야합니다. 여기서 squash를 사용하는데요, 아래의 커맨드에 보면 스쿼시 옵션에 대한 설명이 있습니다.

일반적으로 맨 위에 있는 커밋의 pick은 그대로 두고, 그 밑의 커밋들에 s 옵션을 주어 스쿼시를 해줍니다. 스쿼시란 말은 영어 뜻 그대로 커밋들을 압축, 한 곳으로 몰아넣는다는 뜻 입니다.


위처럼 수정하고 파일을 저장하고 닫으면, 바로 아래와 같이 기존 커밋 메시지를 수정하는 화면이 나타납니다. 주석처리된 부분은 신경쓰지 않고, 메시지가 작성된 부분만 수정하면 되는데요, 여러 커밋메시지를 합쳐서 하나의 커밋 메시지로 만들면 됩니다.

저는 아래와 같이 간단히 두 커밋메시지를 한 군데에 모아서 합쳤습니다.

위의 커밋메시지를 저장하면 다시 쉘 창으로 나오게 되는데, 컨플릭트가 없다면 절차가 아래처럼 끝납니다. 컨플릭트가 난다면, 해당 파일을 수정한 후, git add를 한 다음 >>> git rebase --continue를 입력해 절차를 진행합니다.

리베이스가 마무리되면, PR을 합니다. 그런데 만약 기존에 PR을 올렸다가 수정을 한 후 다시 올리는거라면, 기존처럼 >>> git push origin <branch명> 이렇게만 올리면 아래와 같은 에러가 뜹니다. 리베이스를 사용하면서 말 그대로 브랜치의 역사를 바꿔놨기 때문에 깃에서 거부를 하는건데요, 이때는 --force 옵션을 써서 올려주면 해결 됩니다.

이상 리베이스에 적용에 대해 알아봤습니다.

profile
개발자가 되어가는 중

0개의 댓글