🔎 서론
코딩 작업 중 잘못된 커밋이나 실수로 브랜치를 삭제해 당황한 경험이 있나요? 😱 Git을 사용할 때 이러한 실수는 흔히 발생할 수 있지만, 다행히 Git Reflog와 Git Reset을 사용하면 안전하게 코드를 복구할 수 있습니다.
🔑 Git Reflog는 모든 Git 명령 내역을 추적하여 잃어버린 커밋이나 브랜치를 찾을 수 있게 해주며, Git Reset은 특정 시점으로 코드를 되돌릴 때 사용됩니다. 이 글에서는 Reflog와 Reset의 개념, 사용법, 실전 예시, 그리고 주의사항을 단계별로 설명합니다. ✅
📚 1. Git Reflog란 무엇인가?
Git Reflog는 Git의 HEAD 및 브랜치 이동 내역을 추적합니다. 커밋 삭제, 브랜치 제거, 리베이스 등으로 히스토리가 사라져도 Reflog를 통해 복구할 수 있습니다.
📌 Git Reflog의 주요 특징
✅ 최근 작업 내역 추적 (브랜치 이동, 커밋, 리베이스 등)
✅ 잃어버린 커밋 및 브랜치 복구 가능
✅ 90일 동안 기록 보관 (기본 설정 기준)
✅ Git log와 달리 로컬 전용 기록을 보여줌
📝 Reflog 확인 방법
git reflog
✅ 출력 예시:
b1a2c3d HEAD@{0}: commit: Fix login bug
9f8e7d6 HEAD@{1}: checkout: moving from feature to main
abc1234 HEAD@{2}: commit: Add user profile page
✔️ **HEAD@{번호}**를 사용해 원하는 시점으로 이동할 수 있습니다.
🔄 2. Git Reset의 개념과 사용법
Git Reset은 커밋 기록이나 스테이징 영역을 지정된 상태로 되돌리는 명령어입니다. 작업을 취소하거나 잘못된 커밋을 제거할 때 사용합니다.
📌 Reset 옵션 종류 및 차이점
옵션설명작업 디렉토리 영향스테이징 영향
--soft | HEAD 포인터만 이동 | 유지 | 유지 |
--mixed (기본값) | HEAD 이동 + 스테이징 해제 | 유지 | 제거 |
--hard | 모든 변경 사항 제거 | 제거 | 제거 |
✅ TIP: 데이터 손실 위험이 있는 --hard 옵션 사용 시 주의하세요!
📝 Reset 사용 예시
# 가장 최근 커밋 취소 (작업 내용은 유지)
git reset --soft HEAD~1
# 스테이징 해제 및 코드 유지
git reset --mixed HEAD~1
# 모든 변경 사항 제거 (복구 불가)
git reset --hard HEAD~1
🛠️ 3. Reflog와 Reset을 이용한 코드 복구 실전 예시
🧩 예시 1: 잘못된 커밋 되돌리기
1️⃣ 실수로 잘못된 커밋 후 push까지 한 경우:
git log --oneline # 커밋 확인
git reset --soft HEAD~1 # 커밋 취소 및 스테이징 유지
✅ 코드 수정 후 다시 커밋할 수 있습니다.
🧩 예시 2: 삭제된 브랜치 복구하기
1️⃣ 삭제 전 브랜치 참조 확인:
git reflog # 브랜치가 존재하던 시점 확인
2️⃣ 원하는 커밋으로 브랜치 복구:
git checkout -b restored-branch HEAD@{2}
✅ 사라진 브랜치를 되찾을 수 있습니다! 🔄
🧩 예시 3: 실수로 코드 덮어쓰기 복구
1️⃣ git reset --hard 실행 후 코드 복구:
git reflog # 이전 커밋 찾기
git reset --hard HEAD@{3} # 복구
✅ Reflog를 사용하면 잘못된 hard reset도 되돌릴 수 있습니다.
📝 4. Reflog와 Reset 사용 시 주의사항
⚠️ Reset 사용 전 확인하세요! ✔️ --hard 옵션은 작업 디렉토리까지 초기화합니다. 신중히 사용하세요.
✔️ 협업 중인 브랜치에서는 reset 사용을 자제하고 revert를 고려하세요.
✔️ Reflog는 로컬에서만 사용 가능하므로 원격 브랜치는 복구할 수 없습니다.
✔️ Reflog 기록도 90일이 지나면 삭제되니 빠른 복구 시도가 중요합니다.
✅ TIP: 중요한 변경 전 git stash로 코드 백업을 추천합니다.
💡 5. Reflog와 Reset 비교 및 상황별 추천 사용법
기능 | Git Reflog | Git Reset |
사용 목적 | 작업 내역 확인 및 복구 | 특정 시점으로 되돌리기 |
데이터 복구 | 가능 | 제한적 (hard 사용 시 불가) |
사용 시기 | 커밋/브랜치 삭제 후 복구 시 | 잘못된 커밋 되돌릴 때 |
위험성 | 낮음 | --hard 사용 시 높음 |
✅ 추천:
✔️ 코드 실수 복구: Reflog + Reset 조합 사용
✔️ 최근 커밋 되돌리기: git reset --soft HEAD~1
✔️ 협업 중 오류 수정: git revert 사용 추천
📝 결론
Git Reflog와 Reset을 사용하면 코드 실수나 실험적 변경에도 빠르게 복구할 수 있습니다. Reflog로 이전 작업 내역을 확인하고, Reset으로 안전하게 원하는 상태로 되돌리세요. 하지만 --hard 옵션 사용 시 데이터 손실 위험이 있으니 신중해야 합니다. 실수하더라도 Git의 복구 기능을 활용하면 언제든 해결할 수 있으니 두려워하지 마세요! 💻🚀
👉 다음 글에서는 "Git Cherry-Pick으로 선택적 커밋 적용 방법"을 다룹니다. 많은 기대 부탁드립니다!
🏷️ 추천 키워드
- Git Reflog 사용법
- Git Reset 복구 방법
- 코드 복구 실전 팁
- Git 커밋 되돌리기
- 브랜치 삭제 복구
- hard reset 복구 방법
- Git 실수 해결법
- Reflog로 코드 복구하기
- 안전한 코드 되돌리기
- Git Reset과 Reflog 차이
✅ 지금 바로 실습하며 Git 복구 기능을 마스터하세요! 🚀
'[2. 공부] > [2.1 코딩]' 카테고리의 다른 글
🐞 Git Bisect로 버그 원인 빠르게 찾는 방법 (0) | 2025.02.28 |
---|---|
🍒 Git Cherry-Pick으로 선택적 커밋 적용 방법 (0) | 2025.02.28 |
⚙️ Git Hooks를 이용한 자동화 및 코드 품질 관리 (1) | 2025.02.27 |
🗂️ Git 서브모듈을 이용한 프로젝트 구성 관리 방법 (0) | 2025.02.25 |
🗂️ Git 서브모듈을 이용한 프로젝트 구성 관리 방법 (0) | 2025.02.25 |