Git 최신 버전에서 git pull을 실행하면 아래와 같은 긴 노란색 경고(Warning)를 한 번쯤 마주치게 됩니다:
warning: Pulling without specifying how to reconcile divergent branches is discouraged.
You can squelch this message by running one of the following commands:
git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only이 경고는 "로컬과 원격의 커밋이 서로 갈라졌을 때(Divergent), Git이 어떤 전략으로 합쳐야 할지 명확히 정책을 정해달라"는 의미입니다. 이 문서에서는 3가지 옵션의 결정적 차이와 실무 팀 권장 설정을 정리합니다.
1. 3가지 pull 전략 비교
| 옵션 | 동작 방식 | 장단점 |
|---|---|---|
| pull.rebase false (기본값) | 원격 커밋과 로컬 커밋을 Merge Commit을 만들어 합침 | pull 할 때마다 "Merge branch 'develop' of ..." 같은 불필요한 커밋이 계속 생겨 히스토리가 지저분해짐 |
| pull.rebase true (실무 추천) | 원격 최신 커밋 뒤로 내 로컬 커밋들을 Rebase로 재배치 | 불필요한 머지 커밋 없이 깔끔한 1자 선형 히스토리를 유지함 |
| pull.ff only (안전성 최우선) | 오직 Fast-Forward(단순 빨리감기)가 가능할 때만 pull을 허용하고, 갈라졌다면 즉시 중단 | 내가 로컬에서 커밋을 만든 상태라면 pull이 거부되므로, 원격 변경사항을 실수로 덮어쓰지 않음 |
2. 실무 팀 권장 설정 2가지
추천 1: 개인 작업의 생산성을 위한 'Rebase' 전역 설정
가장 많은 시니어 개발자들이 선호하는 설정입니다. pull 할 때마다 생기는 지저분한 머지 커밋을 원천 차단합니다.
git config --global pull.rebase true추천 2: 메인 브랜치(develop, main) 보호를 위한 'ff-only' 설정
로컬의 develop이나 main 브랜치에서는 직접 커밋을 만들지 않고 항상 원격과 똑같이 맞춰야 하므로, pull.ff only를 적용하면 혹시라도 발생할 로컬 오염을 막을 수 있습니다.
# 현재 레포의 특정 브랜치에만 ff-only 적용
git config branch.develop.rebase false
git config pull.ff only3. 이미 갈라진 상태에서 충돌 발생 시 대처
pull.rebase true 상태에서 pull을 받다가 원격 변경사항과 로컬 변경사항이 충돌하면 rebase 충돌 상태로 진입합니다.
# 1. 충돌 파일 확인 및 수정
git status
# 2. 마커 제거 후 스테이징
git add <충돌파일>
# 3. 리베이스 계속 진행
git rebase --continue