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가 없습니다
'DevOps > Git' 카테고리의 다른 글
[Git] Gitflow 브랜칭 전략 (0) | 2024.12.31 |
---|---|
[Git] 추적되지 않는 파일 깔끔하게 정리하기 : git clean (0) | 2024.12.31 |
[Git] 커밋하지 않은 변경사항 되돌리기 ( restore ) (0) | 2024.12.31 |
[Git] stash와 amend 가이드: 작업 임시저장과 커밋 수정하기 (0) | 2024.12.31 |
[Git] Commit message 타입 (0) | 2024.12.31 |