git reset --hard HEAD~1
되돌리는 방법
git reset --hard HEAD~1
을 실수로 실행하는 것은 개발자에게 실망스러운 경험이 될 수 있습니다. 이 명령어는 최신 커밋과 함께 모든 변경 사항을 영구적으로 제거하여 곤란한 상황에 처하게 만듭니다. 하지만 걱정하지 마세요—가비지 컬렉션이 되지 않았다면 잃어버린 커밋을 복구할 수 있는 방법이 있습니다. 이 포스트에서는 이 명령어의 영향을 되돌리고 파일을 복원하는 방법에 대해 깊이 살펴보겠습니다.
문제 이해하기
git reset --hard HEAD~1
을 실행하면 Git은 HEAD
포인터를 이전 커밋으로 되돌립니다. 이 작업은 마지막 커밋과 작업 디렉토리에서 이루어진 모든 변경 사항을 버리게 됩니다. 코드에서는 이 명령어가 다음과 같이 나타납니다:
git reset --hard HEAD~1
문제는 일단 리셋하면 커밋과 변경 사항이 사라진 것처럼 보일 수 있지만, 다행히도 Git은 HEAD
에 대한 모든 변경 사항을 추적하는 참조 로그(리플로그)를 유지하므로 복구 경로를 제공합니다.
해결책: Git Reflog 사용하기
1. 리플로그 확인하기
잃어버린 커밋을 복구하기 위한 첫 번째 단계는 리플로그를 확인하는 것입니다. 리플로그는 HEAD
포인터에 대한 업데이트를 추적하므로 리셋 명령어를 실행하기 전에 HEAD
가 어디에 있었는지 확인할 수 있습니다.
다음 명령어를 실행하여 리플로그를 확인합니다:
git reflog
다음과 같은 출력이 나타날 것입니다:
1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD
f6e5064... HEAD@{1}: commit: added file2
이 경우, f6e5064
는 잃어버린 커밋의 해시(여기서 file2
를 추가한 곳)를 나타냅니다.
2. 잃어버린 커밋으로 되돌리기
이제 커밋 참조(f6e5064
)를 얻었으므로, 다음 명령어를 실행하여 이전 상태로 복원할 수 있습니다:
git reset --hard f6e5064
이 명령어를 실행한 후, 당신의 리포지토리는 file2
에서 추가된 변경 사항이 포함된 상태로 복원될 것입니다. 파일이 성공적으로 복원되었는지 확인하려면 내용을 확인해 보세요:
cat file2
기대하는 출력(이 경우, file2
의 내용)이 보인다면 복구가 성공적으로 이루어진 것입니다.
요약
하드 리셋으로 인해 작업이 잃어버리는 것이 프로젝트에 재앙으로 이어질 필요는 없습니다. 리플로그를 활용하여 몇 개의 명령어로 잃어버린 커밋을 쉽게 복구할 수 있습니다.
주요 사항:
- 리플로그는 당신의 친구입니다: 잃어버린 커밋을 찾으려면
git reflog
를 사용하세요. - 리셋: 필요할 경우 이전 커밋으로 돌아가기 위해
git reset --hard <commit-hash>
를 사용하세요. - 인내: 당황하지 마세요; Git은 이러한 작업에서 복구할 수 있는 메커니즘을 제공합니다.
이 팁들을 통해 향후 Git 명령어와 관련된 실수를 처리하는 데 더 나은 대비를 할 수 있을 것입니다!