[2. 공부]/[2.1 코딩]

🔄 Git Reflog와 Reset을 이용한 안전한 코드 복구 방법

주식경이 2025. 2. 28. 15:56
반응형

🔎 서론

코딩 작업 중 잘못된 커밋이나 실수로 브랜치를 삭제해 당황한 경험이 있나요? 😱 Git을 사용할 때 이러한 실수는 흔히 발생할 수 있지만, 다행히 Git ReflogGit 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으로 선택적 커밋 적용 방법"을 다룹니다. 많은 기대 부탁드립니다!


🏷️ 추천 키워드

  1. Git Reflog 사용법
  2. Git Reset 복구 방법
  3. 코드 복구 실전 팁
  4. Git 커밋 되돌리기
  5. 브랜치 삭제 복구
  6. hard reset 복구 방법
  7. Git 실수 해결법
  8. Reflog로 코드 복구하기
  9. 안전한 코드 되돌리기
  10. Git Reset과 Reflog 차이

지금 바로 실습하며 Git 복구 기능을 마스터하세요! 🚀

반응형