안 좋은 pull, rebase, reset 에서 회복
조만간 Git 명령 돌리고 빨간 텍스트 물결 보고 속이 내려앉을 거야. 좋은 소식: 거의 모든 'Git 작업 잃음' 상황이 회복 가능. 회복 절차는 매번 같은 모양: 파괴적 명령 그만, git reflog 로 잃은 tip 찾기, branch 에 anchor, 평가, 통합 방법 선택.
첫 동작은 항상 git reflog --date=relative -n 50. 출력은 90 일 동안의 모든 HEAD 이동 + timestamp. 원하는 상태 같은 entry 찾기 — 보통 파괴적 명령 직전 거. 각 entry 의 hash 가 돌아갈 수 있는 진짜 commit. Rescue target 식별 전엔 더 파괴적 명령 안 돌려.
Anchor 가 다음. git switch -c rescue HEAD@{N} 이 잃은 tip 가리키는 새 branch 생성. 거기서 평가: 이게 정확히 잃은 거인가, commit 일부 빠졌나? git log rescue --oneline 으로 확인. 잃은 작업 든 branch 가 있으면 재앙 끝 — 통합 방법 선택. 원본 branch 에 git reset --hard rescue 가 모두 복귀. 또는 git cherry-pick 으로 특정 잃은 commit 만 현재 main 에. 또는 rescue branch 를 병렬 기록으로 두고 계속.
흔한 시나리오 셋. 안 좋은 pull merge — 원하던 선형 history 대신 우발 merge commit. git reset --hard ORIG_HEAD 가 pull 전으로 rewind, 그 다음 git pull --rebase 로 선형 버전. 안 좋은 rebase — rebase 가 엉망 만들거나 중간 해결 불가 conflict. git rebase --abort 가 rebase 전으로 rewind. 안 좋은 rebase 결과 commit 했으면 git reflog + git reset --hard HEAD@{N}. 안 좋은 force-push — 동료 작업 덮어씀. 그들 reflog 에 여전히 있음, 그들이 보유한 상태에서 git push --force-with-lease 또는 force-push 전 그들 작업 봤으면 네 reflog 의 HEAD@{N} 으로 회복.