본문 바로가기

Tools/Git&Github

Git rebase를 사용해서 커밋 정리하기

rebase

 

🔐 들어가며

안녕하세요! 이번 포스팅에서는 PR을 올릴 때, git rebase 기능을 사용해서 커밋을 정리하는 방법에 대해 알아보겠습니다. 이 포스팅에서 다루는 git rebase 명령어는 아래와 같습니다.

  • fixup, squash : 커밋 병합
  • reword : 커밋 이름 변경

⏳ rebase 사용 플로우

1. 작업 & PR & 코드리뷰

기본적으로 브랜치를 나누고 해당 브랜치에서 작업을 한 뒤에 작업이 모두 끝나면 PR을 날리게 됩니다.

그 이후에는 코드 리뷰를 받게 되고, 리뷰 받은 건을 수정하고 올리면 사진과 같이 수정 커밋이 남게 됩니다. 이 커밋들 중에 사소한 커밋(ex. 오타 수정, 공백 제거)들은 git rebase를 이용해서 커밋 병합을 하게 되면 아래와 같은 이점이 생깁니다.

  1. 중요한 커밋만 남기 때문에 로그를 찾아보기 쉬워진다.
  2. 브랜치 전반에 걸쳐 무슨 작업을 했는지 더 이해하기 쉬워진다.

2. fixup : 커밋 병합하기

현재 브랜치 상태에서 아래와 같은 명령어를 입력하면 커밋 목록이 뜨게 됩니다.

$ git rebase -i master (또는 main)

여기서 병합할 커밋들의 위치를 조정하게 됩니다. vim 명령어 단축키 dd (잘라내기) + p (붙여넣기)를 사용해서 커밋의 위치를 조정할 수 있습니다.

위치가 조정된 커밋들

그 다음에는 INSERT 상태에서 pick을 다른 명령어로 바꿀 수 있습니다. 병합에 사용하는 명령어는 fixupsquash가 있는데, 차이점은 아래와 같습니다.

  • squash : 원본과 합치는 대상 커밋의 메시지를 결합한 메시지 표시
pick 1aab3a 원본 커밋 메세지
squash 70c0cc 합칠 커밋 메시지

# squash result
원본 커밋 메세지

squash 커밋 메시지
  • fixup : 원본 유지, 합치는 대상 커밋 메시지 삭제
pick 1aab3a 원본 커밋 메세지
fixup 70c0cc 합칠 커밋 메시지

# fixup result
원본 커밋 메세지
# no sub messages

저는 fixup을 사용해서 rebase를 진행했습니다.

그 이후에 ESC - wq로 저장 후 종료를 하면 되는데, 순조롭게 병합이 되면 정말 좋지만

충돌이 나는 경우가 있습니다. 😢

충돌이 난다면 해당 파일에서 충돌을 해결한 뒤에

$ git add . (또는 파일명)
$ git rebase --con

결과창

이후에 계속 위 작업(충돌 해결 - add - rebase con)을 반복하면

성공하게 됩니다.

$ git log

로그를 확인하면 커밋이 합쳐진 것을 확인할 수 있습니다.

$ git push -f 브랜치명

강제로 push를 하기위해 force push를 사용해줍니다.

 

3. reword : 커밋 메세지 변경

$ git rebase -i master (또는 main)

pickreword로 바꾸어줍니다. (이때 변경할 커밋 메세지는 적지 않고 키워드만 변경해주세요!)

그 후에 ESC + :wq로 저장 후 종료를 해준 후에

여기에서 커밋 메세지를 수정해줍니다.

$ git log

커밋 메세지가 수정된 것을 확인할 수 있습니다.

$ git push -f 브랜치명

강제로 push를 하기위해 force push를 사용해줍니다.