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