본문 바로가기
C.W.K.
Stream
Lesson 03 of 04 · published

잘못된 pull/rebase에서 복구하기

~24 min · playbook, reflog, rebase

Level 0추적 전 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

잘못된 pull, rebase, reset에서 회복하기

언젠가는 Git 명령 뒤 빨간 문장이 쏟아져 가슴이 철렁할 거야. 좋은 소식은 작업을 잃었다고 느끼는 상황 대부분이 복구 가능하다는 거야. 절차는 늘 같아. 파괴적인 명령을 더 실행하지 말고 git reflog에서 잃은 tip을 찾아 branch로 붙잡은 뒤 상태를 평가하고 통합 방법을 골라.

첫 동작은 git reflog --date=relative -n 50야. 지난 90일의 HEAD 이동과 시간이 보이고, 대개 파괴적인 명령 바로 전 entry가 원하는 상태야. 각 entry의 hash는 실제로 돌아갈 수 있는 commit이야. rescue할 target을 확인하기 전에는 상황을 더 바꾸는 명령을 실행하지 마.

다음은 git switch -c rescue HEAD@{N}으로 잃은 tip에 branch를 붙이는 일이야. git log rescue --oneline에서 찾던 작업이 맞고 commit이 빠지지 않았는지 확인해. 여기까지 왔다면 재앙은 끝났어. 원래 branch를 git reset --hard rescue로 되돌리거나, 필요한 commit만 git cherry-pick하거나, rescue branch를 나란히 보존할 수 있어.

흔한 경우는 셋이야. 원치 않은 merge commit을 만든 pull은 git reset --hard ORIG_HEAD로 pull 전으로 돌아가 git pull --rebase로 다시 할 수 있어. rebase 중 해결하기 어려운 conflict에 빠졌다면 git rebase --abort하고, 이미 잘못된 결과까지 만들었다면 git refloggit reset --hard HEAD@{N}을 써. force-push로 동료 작업을 덮었다면 그들의 reflog나 네가 마지막 fetch 때 본 reflog entry에서 tip을 찾아 조율한 뒤 git push --force-with-leaseHEAD@{N}의 작업을 복구해.

Code

일반 회복 절차·bash
# 1. 멈춰. 파괴적 명령 더 안 돌려.

# 2. Reflog 검사:
git reflog --date=relative -n 50

# 3. 원하는 상태 식별 — 보통 파괴적 명령 직전.
#    HEAD@{N} 또는 hash 기록.

# 4. Rescue branch 에 잃은 tip anchor:
git switch -c rescue HEAD@{3}        # 옳은 N 사용

# 5. 검증:
git log rescue --oneline -n 10

# 6. 통합 방법 선택:
#    - 원본 branch 로 되돌리기:
git switch original-branch
git reset --hard rescue

#    - 또는 특정 잃은 commit cherry-pick:
git cherry-pick rescue~2 rescue~1 rescue
흔한 시나리오 명령·bash
# 원치 않는 merge commit 만든 안 좋은 pull:
git reset --hard ORIG_HEAD
git pull --rebase                    # 다시, 선형

# Rebase 중간 엉망 — 빠져나가기:
git rebase --abort

# 이미 commit 된 안 좋은 rebase 결과:
git reflog
git reset --hard HEAD@{N}            # rebase 전

# Force-push 된 branch 회복 (동료 작업 덮어씀):
git reflog                            # 마지막 fetch 한 시각
git switch -c rescue-teammate HEAD@{N}
git push --force-with-lease origin rescue-teammate

External links

Exercise

commit이 다섯 개 이상인 연습용 branch에서 세 가지 사고를 일부러 만들어. (1) git reset --hard HEAD~3, (2) rebase 도중 conflict에서 git rebase --abort, (3) 다시 쓴 branch를 git push --force한 뒤 reflog로 회복하기야. 매번 git reflog에서 잃은 tip을 찾아 복원하고, 절차를 알기 전에는 어느 상황이 가장 무서웠는지 적어봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.