Published on

Git Pull --no-rebase와 그 외 명령어들 정리

🔄 Git Pull --no-rebase와 그 외 명령어들 정리

협업 중 커밋 히스토리를 관리할 때, git pull 관련 명령어들의 차이를 정리해보자 ;;;. 이 글에서는 --no-rebase, --rebase, --ff-only와 함께 fetch, merge, rebase 명령까지 함께 비교 정리.


📌 git pull의 기본 동작

git pull
  • 실제로는 다음 명령어의 축약:
    git fetch origin
    git merge FETCH_HEAD
    
  • 즉, 원격 브랜치의 변경 사항을 가져오고 자동 병합(Merge)을 수행한다.

✅ 주요 옵션별 동작 비교

명령어동작 방식병합 커밋히스토리 구조특징
git pullfetch + merge✅ 생김브랜치 병합기본 동작
git pull --no-rebasefetch + merge✅ 생김브랜치 병합rebase 설정 무시
git pull --rebasefetch + rebase❌ 없음직선형 히스토리커밋 해시 변경됨
git pull --ff-onlyfast-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

🛠️ 기본 설정 팁

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

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

📋 최종 정리표

명령어병합 방식히스토리 형태병합 커밋사용 목적
git pullmerge브랜치형✅ 있음기본
git pull --no-rebasemerge브랜치형✅ 있음rebase 설정 무시
git pull --rebaserebase직선형❌ 없음깔끔한 커밋 정리
git pull --ff-onlyfast-forward직선형❌ 없음안전 병합만 허용
git fetch + merge수동 merge브랜치형✅ 있음명시적 병합
git fetch + rebase수동 rebase직선형❌ 없음선형 히스토리 유지

✨ 팀마다 Git 전략이 다를 수 있으니, 위 명령어들을 이해하고 팀 컨벤션에 맞게 사용하는 것이 중요하겠당다다다아당.