Git Pull --rebase로 직선형 커밋 히스토리 유지 방법
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Git Pull --rebase: 직선형 커밋 히스토리 유지 방법

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

Git을 사용하는 개발자, 특히 협업 환경에서 커밋 히스토리를 정리하고 싶은 경우

핵심 요약

  • git pull --rebasemerge commit을 생성하지 않고 직선형 히스토리를 유지한다.
  • git pull --rebasegit fetch → 로컬 커밋 임시 삭제 → 원격 변경사항 적용 → 로컬 커밋 재적용 순서로 작동한다.
  • 주요 사용 시나리오: main 브랜치 정리, 의존성 브랜치 동기화, git rebase -i와 결합한 커밋 정리.

섹션별 세부 요약

1. `git pull` 기본 동작

  • git pullgit fetchgit merge을 수행해 merge commit을 생성한다.
  • 예시: 로컬 커밋과 원격 커밋이 병합되어 복잡한 히스토리가 생성됨.

2. `git pull --rebase` 동작 방식

  • 4단계:
  1. git fetch로 원격 변경사항 가져오기.
  2. 로컬 커밋 임시 저장.
  3. 원격 커밋 적용.
  4. 로컬 커밋을 업데이트된 브랜치 위에 재적용.
  • 결과: merge commit 없이 직선형 히스토리 유지.

3. `main` 브랜치 유지 전략

  • CI/CD 워크플로우에서 main 브랜치에 merge commit이 생기지 않도록 --rebase 강제 적용.
  • git pull --rebase origin main 명령어 사용.
  • --force-with-lease 옵션으로 강제 푸시 시 충돌 방지.

4. 의존성 브랜치 동기화

  • 예: feature/loginfeature/auth에 의존할 때, git pull --rebase origin feature/auth로 의존성 브랜치 동기화.
  • merge commit 없이 정리된 의존성 체인 유지.

5. `git rebase -i`와 결합한 커밋 정리

  • git rebase -i HEAD~3로 커밋 합치기, 메시지 수정, 불필요 커밋 삭제 가능.
  • git pull --rebasegit rebase -i 실행해 커밋 히스토리 정리.

6. 장기 브랜치 관리

  • git pull --rebase 주기적 실행으로 메시지 없는 히스토리 유지.
  • 예: feature 브랜치가 수주간 유지될 경우, merge commit 대신 직선형 구조 유지.

7. 강제 푸시 대응

  • git fetch origin maingit rebase origin/main으로 강제 푸시된 main과 동기화.
  • "diverged branch" 오류 방지.

8. 자동 stash 기능

  • git pull --rebase --autostash으로 작업 중인 변경사항 자동 저장 및 복구.

9. 주의사항

  • 공유 브랜치에는 재기반 브랜치 사용 시 협업자 히스토리 손상 가능성.
  • 태깅된 브랜치rebase커밋 해시 변경으로 태그 손상 발생.

결론

  • git pull --rebase직선형 히스토리 유지, merge commit 제거, 협업 편의성 향상에 유리.
  • main 브랜치 정리, 의존성 브랜치 동기화, git rebase -i 활용 시 커밋 히스토리 최적화 가능.
  • 주의: 공유 브랜치 및 태깅된 브랜치에서는 사용 자제.