Git Squashing: 커밋 히스토리 정리 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
소프트웨어 개발자, 버전 관리 도구 사용자, 팀 협업에 관심 있는 개발자
핵심 요약
- Git squash는 여러 커밋을 하나의 의미 있는 커밋으로 병합하여 히스토리 정리 및 리뷰 효율성 향상
git rebase -i
명령어를 사용해 커밋 병합 가능 (예:squash
키워드 사용)- 강력한 주의사항: 기존 브랜치에 푸시한 후 squash 시
git push --force-with-lease
로 강제 푸시 필요 - 코드 품질 향상: 팀 내 협업 시 커밋 히스토리의 투명성과 전문성 유지
섹션별 세부 요약
섹션 1: Git Squashing 정의
- Git squashing은 "작업 진행 중" 커밋(WIP)을 제거하고, 의미 있는 단일 커밋으로 재구성
- 예시:
- 원본 커밋:
Create login form
,Fix typo
,Add styles
- 병합 후:
Create login form with styles and fixes
- 장점: 리뷰자 및 향후 개발자가 코드 흐름을 쉽게 파악 가능
섹션 2: Squashing 사용 시기
- Merge 전: Feature 브랜치를
main
또는develop
에 병합하기 전 - Exploaratory coding 후: 여러 작은 변경사항을 포함한 탐색적 개발 이후
- Pull Request 준비 시: 깔끔한 코드 리뷰를 위해
섹션 3: Git에서 Squash 실행 방법
- Interactive rebase 시작:
```bash
git rebase -i HEAD~3
```
HEAD~3
: 최근 3개 커밋을 대상으로 지정
- 커밋 병합 지정:
pick
대신squash
키워드 사용 (예:squash b7d2f1c Add button styles
)
- 최종 커밋 메시지 수정:
- 기존 메시지 합성 (예:
Create button component with styles and spacing fixes
)
섹션 4: Untracked Changes 처리
- Untracked changes가 있을 경우:
```bash
git add .
git commit -m "Handle final UI tweaks"
```
- 이후
git push
로 변경사항과 함께 푸시
섹션 5: Squashing의 중요성
- 코드 리뷰 효율성: 복잡한 커밋 히스토리가 리뷰 시간 증가
- 디버깅 편의성:
git blame
명령어 사용 시 정확한 변경 기록 확인 - 팀 협업: 커밋 히스토리가 투명하면 협업 프로세스 개선
결론
- Git squashing은 코드 품질과 팀 협업을 위한 핵심 실천 방법
git rebase -i
와squash
명령어 사용으로 커밋 히스토리 정리- 강제 푸시 시
--force-with-lease
를 사용해 협업 중 변경사항 충돌 방지 - 정기적인 squashing 실천으로 깔끔한 히스토리 유지 및 팀 워크플로우 개선