✅ 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 -f와 reset --hard는 위험한 양날의 검이므로 신중히 사용
💡 팁: 로컬 변경사항 백업하고 강제 pull 하기
git stash
git fetch origin
git reset --hard origin/main
git stash pop
→ 강제로 pull한 뒤에 변경사항을 다시 적용해보고 싶은 경우 유용합니다.
'git' 카테고리의 다른 글
[Git] GitHub HTTPS 인증 실패: "Support for password authentication was removed" 에러 해결 가이드 (0) | 2025.04.16 |
---|---|
[Git] Git의 전체 작동 흐름과 주요 명령어 설명 (0) | 2025.04.10 |
[Git] Git 2.25 이상: `git sparse-checkout set`을 이용한 특정 폴더 클론 방법 (0) | 2025.04.10 |
[Git] Git 저장소에서 특정 하위 폴더만 클론하는 방법 (여러 폴더 선택 포함) (0) | 2025.04.10 |
[Git] Git에서 일부 폴더만 작업 후 push 했을 때 생기는 문제와 안전한 대처법 (0) | 2025.04.10 |
댓글