Published on

Git Pull, Rebase, Merge 정리

🔄 Git Pull vs Rebase vs Merge

Git 협업에서 자주 사용되는 git pull, --rebase, --no-rebase, git merge의 차이점과 장단점을 정리.


📌 기본 개념

명령어동작 요약히스토리 구조병합 커밋
git pullfetch + merge브랜치가 합쳐짐✅ 생김
git pull --no-rebasefetch + merge (rebase 방지)브랜치 병합✅ 생김
git pull --rebasefetch + rebase커밋을 직선형으로 재배치❌ 없음
git merge <branch>수동 병합현재 브랜치에만 병합✅ 생김

✅ 예시로 보는 히스토리 변화

git pull --no-rebase or git merge

A -- B -- C
      \     \
       D -- E -- M  (Merge Commit)
  • 로컬에서 작업한 커밋 D, E가 Merge Commit M을 통해 병합됨

git pull --rebase

A -- B -- C -- D' -- E'
  • 커밋 D, E가 최신 커밋 C 이후로 재배치됨 (커밋 해시도 변경됨)

✅ 장단점 비교

구분병합 방식 (pull/merge)리베이스 방식 (pull --rebase)
히스토리브랜치 흐름이 보이고 직관적깔끔하고 선형 구조
협업 시 가시성누가 병합했는지 알 수 있음병합의 흔적 없음
병합 커밋✅ 생김❌ 없음
충돌 처리자동 병합 + 수동 해결커밋마다 충돌 발생 가능
재작성 여부기존 커밋 유지커밋 해시 재작성
간편성익숙하고 명확함충돌 처리 익숙해야 함
자동화 적합성비교적 낮음CI/CD에 유리한 히스토리

git merge와의 차이점

항목git pullgit merge
자동 fetch 포함✅ 있음❌ 없음 (수동 fetch 필요)
히스토리 병합 전략옵션 다양단순 병합
수동 제어✅ 명확한 병합 시점 통제 가능

🧠 실무 추천 전략

상황추천 명령어
히스토리를 깔끔하게 유지하고 싶음git pull --rebase
협업 흐름을 명확히 드러내고 싶음git pull --no-rebase or git merge
안전하게만 동기화하고 싶음git pull --ff-only
팀 전체 커밋 히스토리를 통제하고 싶음.gitconfig에서 전략 지정

🛠️ 설정 팁

# 기본 pull을 rebase로 설정
git config --global pull.rebase true

# 병합 커밋 방지
git config --global pull.ff only

✅ 결론

  • --rebase: 히스토리 깔끔, 협업 시 충돌 처리만 주의
  • --no-rebase or merge: 흐름 명확, 병합 커밋 많아질 수 있음
  • 상황에 따라 전략을 선택하고, 팀 컨벤션을 정해두는 것이 가장 중요.