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 명령어와 관련된 실수를 처리하는 데 더 나은 대비를 할 수 있을 것입니다!