dh_0e

[Git/GitHub] Git rebase, Git squash로 커밋 정리하기 본문

Git|GitHub

[Git/GitHub] Git rebase, Git squash로 커밋 정리하기

dh_0e 2024. 8. 7. 23:57

Git squash

  • 여러 개의 커밋을 하나의 커밋으로 합치는 방법
  • Git 히스토리를 깔끔하게 유지할 수 있음
  • 하나의 기능이나 버그 수정에 대한 변경 사항을 단일 커밋으로 묶어 관리할 수 있음

 

squash가 필요한 상황

  • 여러 개의 작은 커밋이 있는 경우: 기능 개발 중, 여러 번의 커밋을 만들었지만, 실제로는 하나의 커밋으로 합치는 것이 더 의미있을 때
  • 중복되거나 불필요한 커밋이 많은 경우: 코드를 수정하면서 실수로 많은 중복 커밋이 생겼을 때
  • PR(Pull Request) 전 커밋 정리: PR을 제출하기 전에 커밋을 정리하여 코드 리뷰어가 쉽게 이해할 수 있도록 할 때

 

사용 방법

1. Git 로그 확인

git log
  • 'git log' 명령어를 사용하여 최근 커밋 로그를 확인
  • Git Desktop을 사용하거나 CLI로 커밋을 확인할 필요가 없을 시 생략

 

2. Interactive Rebase 시작

git rebase -i HEAD~3
  • 'git rebase' 명령어를 사용하여 squash할 커밋의 범위를 지정하여 Interactive Rebase를 시작
  • 위 명령어는 최근 세 개의 커밋을 합치는 명령어

 

3. 커밋 합치기

  • Interactive Rebase editer가 열리면, 'pick'을 'squash'로 변경하여 커밋을 합친다.
pick a4b8f6d first commit
squash 3adf3e7 second commit
s 9fceb02 third commit
  • 'squash'는 's'로 생략 가능
  • 이렇게 설정하고 editer를 닫으면 Git이 커밋을 합치는 과정을 시작한다.

 

4. 커밋 메시지 수정

  • editor가 닫히면 다음과 같은 editor가 나온다.
# This is a combination of 3 commits.
# This is the 1st commit message:

Initial commit

# This is the commit message #2:

Fix typo

# This is the commit message #3:

Add new feature

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
  • Git이 rebase를 통해 squash를 할 때, 이전에 작성한 커밋 메시지는 어떻게 할지 사용자에게 물어보는 editor
  • 아래와 같이 커밋 메시지를 하나로 합칠 때 사용할 메시지를 입력하고 wq로 저장후 닫는다.
# This is a combination of 3 commits.
# This is the 1st commit message:

Squash all commit!

 

 

5. Rebase Complete

  • 메시지를 작성하고 저장하면, Git이 rebase를 완료한다.
  • 충돌이 발생하면, 아래 명령어로 충돌을 해결하고 rebase를 계속 진행한다.
git rebase --continue