Git Pull --rebase: 직선형 커밋 히스토리 유지 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Git을 사용하는 개발자, 특히 협업 환경에서 커밋 히스토리를 정리하고 싶은 경우
핵심 요약
git pull --rebase
는 merge commit을 생성하지 않고 직선형 히스토리를 유지한다.git pull --rebase
는git fetch
→ 로컬 커밋 임시 삭제 → 원격 변경사항 적용 → 로컬 커밋 재적용 순서로 작동한다.- 주요 사용 시나리오:
main
브랜치 정리, 의존성 브랜치 동기화,git rebase -i
와 결합한 커밋 정리.
섹션별 세부 요약
1. `git pull` 기본 동작
git pull
은git fetch
후git merge
을 수행해 merge commit을 생성한다.- 예시: 로컬 커밋과 원격 커밋이 병합되어 복잡한 히스토리가 생성됨.
2. `git pull --rebase` 동작 방식
- 4단계:
git fetch
로 원격 변경사항 가져오기.- 로컬 커밋 임시 저장.
- 원격 커밋 적용.
- 로컬 커밋을 업데이트된 브랜치 위에 재적용.
- 결과: merge commit 없이 직선형 히스토리 유지.
3. `main` 브랜치 유지 전략
- CI/CD 워크플로우에서
main
브랜치에 merge commit이 생기지 않도록--rebase
강제 적용. git pull --rebase origin main
명령어 사용.--force-with-lease
옵션으로 강제 푸시 시 충돌 방지.
4. 의존성 브랜치 동기화
- 예:
feature/login
이feature/auth
에 의존할 때,git pull --rebase origin feature/auth
로 의존성 브랜치 동기화. - merge commit 없이 정리된 의존성 체인 유지.
5. `git rebase -i`와 결합한 커밋 정리
git rebase -i HEAD~3
로 커밋 합치기, 메시지 수정, 불필요 커밋 삭제 가능.git pull --rebase
후git rebase -i
실행해 커밋 히스토리 정리.
6. 장기 브랜치 관리
git pull --rebase
주기적 실행으로 메시지 없는 히스토리 유지.- 예:
feature
브랜치가 수주간 유지될 경우, merge commit 대신 직선형 구조 유지.
7. 강제 푸시 대응
git fetch origin main
후git rebase origin/main
으로 강제 푸시된main
과 동기화.- "diverged branch" 오류 방지.
8. 자동 stash 기능
git pull --rebase --autostash
으로 작업 중인 변경사항 자동 저장 및 복구.
9. 주의사항
- 공유 브랜치에는 재기반 브랜치 사용 시 협업자 히스토리 손상 가능성.
- 태깅된 브랜치에 rebase 시 커밋 해시 변경으로 태그 손상 발생.
결론
git pull --rebase
는 직선형 히스토리 유지, merge commit 제거, 협업 편의성 향상에 유리.main
브랜치 정리, 의존성 브랜치 동기화,git rebase -i
활용 시 커밋 히스토리 최적화 가능.- 주의: 공유 브랜치 및 태깅된 브랜치에서는 사용 자제.