반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- CSS
- 테스트자동화
- Eclipse
- ArrayList
- 인텔리제이
- 자바스크립트
- junit
- math
- Visual Studio Code
- javascript
- 정규식
- 배열
- js
- java테스트
- list
- json
- string
- 이클립스
- Array
- 자바문법
- 자바
- IntelliJ
- 단위테스트
- html
- Java
- 문자열
- junit5
- input
- vscode
- HashMap
Archives
- Today
- Total
어제 오늘 내일
[Git] reset --hard로 날린 코드 복구하기 (git reflog) 본문
git reset --hard로 코드를 날려버린 순간, 등줄기에 식은땀이 흐르셨나요?
걱정하지 마세요.
Git에는 "삭제된 기록조차 기록하는" 비밀 장부가 숨겨져 있습니다.
우리는 보통 git log를 통해 과거를 봅니다.
하지만 reset --hard로 지워버린 커밋은 git log에서도 사라져 버리죠.
이때 필요한 것이 바로 Reflog(Reference Log)입니다.
1. Reflog란 무엇인가요?
Reflog는 HEAD가 움직인 모든 발자취를 기록하는 로컬 임시 저장소입니다.
쉽게 말해, "여러분이 실수로 지운 행위"까지도 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가 만능은 아닙니다. 두 가지 제한 사항이 있습니다.
- 로컬에만 존재함: 내 컴퓨터에서만 기록된 정보입니다. 다른 컴퓨터나 서버에서는 내 Reflog를 볼 수 없습니다.
- 유효 기간: Git은 일정 기간(기본 90일, 삭제된 커밋은 더 짧을 수 있음)이 지나면 청소부(Garbage Collector)가 돌면서 연결되지 않은 커밋들을 진짜로 영구 삭제합니다. 실수했다면 미루지 말고 바로 복구하세요.
📝 요약
reset --hard로 지워진 커밋은git log에 안 보인다.git reflog를 치면 지워진 기록까지 모두 볼 수 있다.- 돌아가고 싶은 시점을 찾아 다시
git reset --hard [시점]을 하면 부활한다.
반응형
'IT > Git' 카테고리의 다른 글
| [Git] 내 코드에 버전 도장 쾅! git tag로 배포 버전 관리하기 (0) | 2026.02.05 |
|---|---|
| [Git] 하던 작업을 잠시 멈춰야 할 때: git stash 완벽 정리 (0) | 2026.02.05 |
| [Git] 이미 커밋한 걸 취소하고 싶다면? Reset vs Revert 완벽 정리 (0) | 2026.02.04 |
| [Git] 과거를 추적하는 법: git log로 커밋 기록 조회하고 검색하기 (0) | 2026.02.03 |
| [Git] 작업 합치기: Merge와 공포의 Conflict 해결법 (0) | 2026.02.03 |
Comments
