본문 바로가기

DevOps/Git

[Git] git reset --hard 실수했을 때 복구하는 방법: reflog로 살리기

 

 

 

1. reset --hard는:

  • 작업 디렉토리가 완전히 깨끗해짐
  • Staged 파일들도 모두 사라짐
  • Untracked 파일들은 남아있음 (단, git clean -f와 함께 사용하면 이것도 삭제)
  • git status로도 이전 변경사항을 확인할 수 없음
  • 오직 git reflog로만 이전 상태 확인 가능
# 1. 정상적인 작업 상태
git add .
git commit -m "중요한 작업 완료"

# 2. 실수로 hard reset 실행
git reset --hard HEAD~10  # 10개 이전 커밋으로 되돌림
# (여기서 패닉!)

 

 

2. reflog는 HEAD가 가리켰던 모든 이력을 보관하는 로그입니다.

 

reflog에서 볼 수 있는 정보:

  • 커밋 해시
  • HEAD@{n}: HEAD가 n번째로 가리켰던 위치
  • 어떤 명령이 실행되었는지

 

3. 복구 방법

# 1. reflog로 이력 확인
git reflog
# 출력 예시:
# 789abc HEAD@{0}: reset: moving to HEAD~10
# def456 HEAD@{1}: commit: 중요한 작업 완료  <- 이걸 찾아야 함!
# ...

# 2. 찾은 해시로 reset
git reset --hard def456  # 복구 완료!

 

이렇게 하면:

잃어버렸던 커밋으로 돌아갑니다
작업 디렉토리도 해당 시점으로 복원됩니다
모든 파일과 변경사항이 복구됩니다

 

 

주의사항

 

reflog는 로컬에만 저장됩니다
기본적으로 30일간만 보관됩니다
새로 클론한 저장소에는 이전 reflog가 없습니다