🔐 들어가며
안녕하세요! 이번 포스팅에서는 PR을 올릴 때, git rebase 기능을 사용해서 커밋을 정리하는 방법에 대해 알아보겠습니다. 이 포스팅에서 다루는 git rebase 명령어는 아래와 같습니다.
fixup
,squash
: 커밋 병합reword
: 커밋 이름 변경
⏳ rebase 사용 플로우
1. 작업 & PR & 코드리뷰
기본적으로 브랜치를 나누고 해당 브랜치에서 작업을 한 뒤에 작업이 모두 끝나면 PR을 날리게 됩니다.
그 이후에는 코드 리뷰를 받게 되고, 리뷰 받은 건을 수정하고 올리면 사진과 같이 수정 커밋이 남게 됩니다. 이 커밋들 중에 사소한 커밋(ex. 오타 수정, 공백 제거)들은 git rebase
를 이용해서 커밋 병합을 하게 되면 아래와 같은 이점이 생깁니다.
- 중요한 커밋만 남기 때문에 로그를 찾아보기 쉬워진다.
- 브랜치 전반에 걸쳐 무슨 작업을 했는지 더 이해하기 쉬워진다.
2. fixup : 커밋 병합하기
현재 브랜치 상태에서 아래와 같은 명령어를 입력하면 커밋 목록이 뜨게 됩니다.
$ git rebase -i master (또는 main)
여기서 병합할 커밋들의 위치를 조정하게 됩니다. vim 명령어 단축키 dd
(잘라내기) + p
(붙여넣기)를 사용해서 커밋의 위치를 조정할 수 있습니다.
그 다음에는 INSERT 상태에서 pick
을 다른 명령어로 바꿀 수 있습니다. 병합에 사용하는 명령어는 fixup
과 squash
가 있는데, 차이점은 아래와 같습니다.
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)
pick
을 reword
로 바꾸어줍니다. (이때 변경할 커밋 메세지는 적지 않고 키워드만 변경해주세요!)
그 후에 ESC
+ :wq
로 저장 후 종료를 해준 후에
여기에서 커밋 메세지를 수정해줍니다.
$ git log
커밋 메세지가 수정된 것을 확인할 수 있습니다.
$ git push -f 브랜치명
강제로 push를 하기위해 force push를 사용해줍니다.
'Tools > Git&Github' 카테고리의 다른 글
쉽게 이해하는 Git Flow (0) | 2021.11.18 |
---|---|
Github & IntelliJ로 프로젝트 관리하기 (이슈 만들기, 브랜치 생성, PR날리기) (1) | 2019.09.02 |
깃허브 이슈 템플릿 만들기 (0) | 2019.05.20 |
깃(Git)에 대한 간단한 설명부터 레파지토리 생성 후 커밋, 푸쉬하기까지 (0) | 2019.01.21 |