어제 오늘 내일

[Git] reset --hard로 날린 코드 복구하기 (git reflog) 본문

IT/Git

[Git] reset --hard로 날린 코드 복구하기 (git reflog)

hi.anna 2026. 2. 4. 08:52

git reset --hard로 코드를 날려버린 순간, 등줄기에 식은땀이 흐르셨나요?

걱정하지 마세요.

Git에는 "삭제된 기록조차 기록하는" 비밀 장부가 숨겨져 있습니다.

 

우리는 보통 git log를 통해 과거를 봅니다.

하지만 reset --hard로 지워버린 커밋은 git log에서도 사라져 버리죠.

이때 필요한 것이 바로 Reflog(Reference Log)입니다.

 

1. Reflog란 무엇인가요?

ReflogHEAD가 움직인 모든 발자취를 기록하는 로컬 임시 저장소입니다.
쉽게 말해, "여러분이 실수로 지운 행위"까지도 Git은 몰래 다 기록하고 있다는 뜻입니다.

마치 건물의 CCTV처럼 말이죠.

 

2. 복구하는 방법 (Step-by-Step)

자, 방금 실수로 reset --hard를 해서 코드가 날아간 상황이라고 가정하고 따라와 주세요.

① 죽은 기록 찾기 (git reflog)

터미널에 아래 명령어를 입력합니다.

git reflog

그러면 아래와 같이 내가 했던 모든 행동들이 시간 역순으로 쭉 나옵니다.

[실제 출력 예시]

f9e8d7c (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1  <-- 방금 내가 저지른 실수 (삭제)
a1b2c3d HEAD@{1}: commit: 로그인 기능 구현              <-- ✅ 내가 살리고 싶은 시점
z9y8x7w HEAD@{2}: commit: 초기 설정
...
  • HEAD@{0}: 방금 실행한 reset 명령어입니다.
  • HEAD@{1}: reset을 하기 직전, 즉 내 코드가 살아있던 시점입니다.

② 타임머신 타기 (git reset)

살리고 싶은 시점의 아이디(HEAD@{1} 또는 해시값 a1b2c3d)를 확인했다면, 다시 그 시점으로 리셋하면 됩니다.

# 방법 A: Reflog 번호로 복구
git reset --hard HEAD@{1}

# 방법 B: 커밋 해시값으로 복구 (더 확실함)
git reset --hard a1b2c3d

③ 생존 확인

다시 git log를 쳐보세요. 거짓말처럼 삭제됐던 커밋과 코드가 돌아와 있을 겁니다!

 

3. 주의사항 (골든타임)

Reflog가 만능은 아닙니다. 두 가지 제한 사항이 있습니다.

  1. 로컬에만 존재함: 내 컴퓨터에서만 기록된 정보입니다. 다른 컴퓨터나 서버에서는 내 Reflog를 볼 수 없습니다.
  2. 유효 기간: Git은 일정 기간(기본 90일, 삭제된 커밋은 더 짧을 수 있음)이 지나면 청소부(Garbage Collector)가 돌면서 연결되지 않은 커밋들을 진짜로 영구 삭제합니다. 실수했다면 미루지 말고 바로 복구하세요.

 

📝 요약

  1. reset --hard로 지워진 커밋은 git log에 안 보인다.
  2. git reflog를 치면 지워진 기록까지 모두 볼 수 있다.
  3. 돌아가고 싶은 시점을 찾아 다시 git reset --hard [시점]을 하면 부활한다.

 

 

반응형
Comments