🔄 Git Pull --no-rebase와 그 외 명령어들 정리
협업 중 커밋 히스토리를 관리할 때, git pull
관련 명령어들의 차이를 정리해보자 ;;;. 이 글에서는 --no-rebase
, --rebase
, --ff-only
와 함께 fetch
, merge
, rebase
명령까지 함께 비교 정리.
📌 git pull
의 기본 동작
- 실제로는 다음 명령어의 축약:
git fetch origin
git merge FETCH_HEAD
- 즉, 원격 브랜치의 변경 사항을 가져오고 자동 병합(Merge)을 수행한다.
✅ 주요 옵션별 동작 비교
명령어 | 동작 방식 | 병합 커밋 | 히스토리 구조 | 특징 |
---|
git pull | fetch + merge | ✅ 생김 | 브랜치 병합 | 기본 동작 |
git pull --no-rebase | fetch + merge | ✅ 생김 | 브랜치 병합 | rebase 설정 무시 |
git pull --rebase | fetch + rebase | ❌ 없음 | 직선형 히스토리 | 커밋 해시 변경됨 |
git pull --ff-only | fast-forward only | ❌ 없음 | 직선형 | 병합 불가 시 실패 |
🧩 git pull --no-rebase
- 병합 방식을 강제로 유지하고 싶은 경우 사용
- 커밋 히스토리에 병합 흔적이 남음
pull.rebase=true
로 설정된 환경에서도 rebase를 막고 싶을 때 유용
🧩 git pull --rebase
- 병합 커밋 없이 히스토리를 깔끔하게 만들 수 있음
- 커밋 해시가 변경되므로, 공유된 커밋은 rebase를 피하는 게 좋음
- 협업 히스토리가 복잡해지는 것을 막아줌
🧩 git pull --ff-only
- 병합 커밋이 생기지 않도록 보장
- fast-forward 병합만 허용하며, 불가능하면 에러 발생
- CI/CD와 같이 명확한 히스토리가 필요한 환경에서 유용
💡 추가 명령어들
git fetch
git merge
git rebase
- 커밋을 최신 커밋 위로 재배치하여 히스토리를 선형으로 유지
✅ 실무 추천 전략
상황 | 추천 명령어 |
---|
히스토리를 깔끔하게 유지하고 싶음 | git pull --rebase |
병합 커밋을 명확히 남기고 싶음 | git pull --no-rebase or git merge |
병합 커밋을 만들고 싶지 않음 | git pull --ff-only |
충돌 없이 수동으로 진행하고 싶음 | git fetch + rebase 또는 merge |
🛠️ 기본 설정 팁
git config --global pull.rebase true
git config --global pull.ff only
📋 최종 정리표
명령어 | 병합 방식 | 히스토리 형태 | 병합 커밋 | 사용 목적 |
---|
git pull | merge | 브랜치형 | ✅ 있음 | 기본 |
git pull --no-rebase | merge | 브랜치형 | ✅ 있음 | rebase 설정 무시 |
git pull --rebase | rebase | 직선형 | ❌ 없음 | 깔끔한 커밋 정리 |
git pull --ff-only | fast-forward | 직선형 | ❌ 없음 | 안전 병합만 허용 |
git fetch + merge | 수동 merge | 브랜치형 | ✅ 있음 | 명시적 병합 |
git fetch + rebase | 수동 rebase | 직선형 | ❌ 없음 | 선형 히스토리 유지 |
✨ 팀마다 Git 전략이 다를 수 있으니, 위 명령어들을 이해하고 팀 컨벤션에 맞게 사용하는 것이 중요하겠당다다다아당.