본문 바로가기
git

[Git] Git에서 강제로 Pull 하기 (`로컬 변경사항 무시하고 원격 상태로 덮어쓰기`)

by clolee 2025. 4. 10.

✅ Git에서 강제로 Pull 하기 (로컬 변경사항 무시하고 원격 상태로 덮어쓰기)


🎯 목적

  • 로컬에서 실수로 잘못된 작업을 했거나, 원격 저장소의 최신 상태로 그냥 덮어씌우고 싶은 경우
  • 내 로컬 브랜치의 작업 내용이 사라져도 괜찮고, 원격 브랜치 상태로 초기화하고 싶을 때 사용

🛠 방법 1: git fetch + git reset --hard (가장 명확한 강제 pull)


  
# 1. 원격 정보 가져오기
git fetch origin
# 2. 로컬 브랜치를 원격 브랜치 상태로 강제 초기화
git reset --hard origin/<브랜치명>

예시:


  
git fetch origin
git reset --hard origin/main

🔍 설명

  • git fetch origin : 최신 원격 저장소 정보를 가져옵니다.
  • git reset --hard origin/main : 현재 브랜치를 원격 브랜치 상태로 강제 초기화합니다.
  • ⚠️모든 로컬 변경 사항(커밋 포함)이 삭제되며, 원격 상태로 덮어쓰기 됩니다.

🛠 방법 2: git pull with rebase + force (덮어씌우기 느낌으로)


  
git pull --rebase --autostash
  • 변경사항을 임시로 저장한 뒤 rebase합니다.
  • 충돌 없이 깔끔한 업데이트를 기대할 수 있으나, 충돌 시 복잡해질 수 있습니다.
  • 진짜 “강제 덮어쓰기”는 아니며, 로컬 커밋을 살리면서 원격을 재배열(rebase)하는 방식입니다.

🛠 방법 3: 로컬 브랜치 삭제 → 원격 브랜치 재생성


  
git checkout main
# 브랜치 삭제 후 원격 기준으로 새로 생성
git branch -D 작업중브랜치
git checkout -b 작업중브랜치 origin/작업중브랜치
  • 완전히 깨끗한 상태에서 다시 브랜치를 생성합니다.
  • 브랜치 충돌이 복잡하거나 꼬였을 때 가장 확실한 방식입니다.

📦 예시 상황

❌ 상황: 작업 도중 git push 했더니 충돌 발생


  
error: failed to push some refs to 'origin/main'
hint: Updates were rejected because the tip of your current branch is behind

🔧 해결:


  
git fetch origin
git reset --hard origin/main
git push

⚠️ 주의사항 (꼭 읽기)

항목 설명
reset --hard 로컬 커밋, 수정사항 모두 삭제됩니다. 되돌릴 수 없습니다.
백업 추천 중요한 작업이 있다면 git stash 또는 git branch 백업명으로 미리 저장
협업 중이라면 무분별한 reset은 협업자 코드에 영향을 줄 수 있음 → 사용 전 상의 필수

📝 정리: 강제 Pull 전략 비교

목적 명령어 로컬 변경사항 커밋 내역 유지 결과
원격 상태로 강제 동기화 git fetch + git reset --hard origin/main 삭제됨 삭제됨 원격 브랜치 복사본으로 초기화
정리된 병합 git pull --rebase --autostash 자동 임시저장됨 유지됨 병합 유지
브랜치 초기화 git branch -D + checkout -b 삭제됨 삭제됨 (새로 받음) 원격 기준 브랜치 재생성

📌 실무에서 권장되는 전략

  • 혼자 개발 중이고 실수로 꼬였을 땐 reset --hard가 깔끔함
  • 협업 중이라면 rebase, stash, merge 등 보존 전략 우선
  • 언제든 push -freset --hard위험한 양날의 검이므로 신중히 사용

💡 팁: 로컬 변경사항 백업하고 강제 pull 하기


  
git stash
git fetch origin
git reset --hard origin/main
git stash pop

→ 강제로 pull한 뒤에 변경사항을 다시 적용해보고 싶은 경우 유용합니다.

댓글