개발을 하다 보면 손이 미끄러져서 잘못된 명령어를 치고 "아... 내 하루치 작업 다 날아갔다..."며 식은땀을 흘리는 순간이 찾아옵니다. 하지만 안심하세요. Git은 한 번이라도 커밋(Commit)되거나 스태시된 코드는 절대 쉽게 지우지 않는 완벽한 블랙박스를 가지고 있습니다. 이 문서는 프롬프트 상의 브랜치 상태(branch-name) $를 명시하여 날아간 코드를 100% 구출하는 실무 복구 기법을 다룹니다.
1. 절체절명의 위기: git reset --hard로 날려버린 커밋 살려내기
Step 1. 구출 열쇠: git reflog (Git의 비행기 블랙박스)
# 1. 블랙박스 기록 조회
(feature/payment) $ git reflog
# 출력 결과 예시:
# 3b4a1c2 HEAD@{0}: reset: moving to HEAD~1 <-- 내가 실수로 리셋한 순간!
# a8f9e01 HEAD@{1}: commit: feat: 결제 모듈 연동 완성 <-- 살려내야 할 내 작업 커밋!
# 1c2d3e4 HEAD@{2}: commit: feat: 사용자 장바구니 추가Step 2. 잃어버린 커밋 시점으로 타임머신 타기
# 날아갔던 커밋 시점으로 원상 복구!
(feature/payment) $ git reset --hard a8f9e01
HEAD is now at a8f9e01 feat: 결제 모듈 연동 완성
# 확인: 사라졌던 커밋과 작업 파일이 100% 온전히 복원됨
(feature/payment) $ git log --oneline -n 32. 원격에 이미 올린 커밋 취소: Reset vs Revert
실무 안전 취소: git revert 사용법
이미 원격에 올라간 커밋은 과거를 지우는 reset 대신, 정반대 작업을 수행하는 새 커밋을 생성하는 revert를 사용합니다.
# develop 브랜치로 이동
(feature/payment) $ git switch develop
Switched to branch 'develop'
(develop) $ git pull origin develop
# 취소하고 싶은 버그 커밋의 해시(예: c3f91a2)를 지정하여 롤백 커밋 생성
(develop) $ git revert c3f91a2
[develop 5e6f7a8] Revert "feat: 잘못 올린 기능"
# 안전하게 원격 반영
(develop) $ git push origin develop3. 커밋 전: 수정한 파일을 깨끗하게 원복하기 (git restore)
# 특정 파일 1개만 수정 전 상태로 되돌리기 (수정 내용 영구 삭제)
(feature/payment) $ git restore app/Services/PaymentService.php
# 현재 폴더의 모든 수정 파일 한 번에 되돌리기
(feature/payment) $ git restore .