git reset --hard HEAD~1 되돌리기
따라서 git reset --hard HEAD~1
명령어를 실행하기 전에 신중하게 고려해야 합니다. 하지만 실수로 실행してしまった 경우에도 걱정하지 마세요. 다음과 같은 방법으로 되돌릴 수 있습니다.
git reflog 사용하기
git reflog
명령어는 과거 HEAD 포인터 위치를 기록하는 로그입니다. 이 로그를 사용하면 git reset --hard HEAD~1
이전 상태로 HEAD 포인터를 되돌릴 수 있습니다.
git reflog
위 명령어를 실행하면 다음과 같은 출력이 나타납니다.
<commit hash> HEAD@{1}
<commit hash> HEAD@{2}
...
각 행은 과거 HEAD 포인터 위치를 나타내는 커밋 해시와 HEAD@{n} 형식의 표식으로 구성됩니다. HEAD@{1}은 가장 최근의 HEAD 위치를, HEAD@{2}는 그 이전 위치를 나타냅니다.
git reset --hard HEAD~1
이전 상태로 되돌리려면 해당 커밋 해시를 사용하여 git reset
명령어를 실행합니다. 예를 들어, git reflog
출력에서 HEAD@{2}의 커밋 해시가 1234567890
이라고 가정하면 다음과 같은 명령어를 실행합니다.
git reset --hard 1234567890
git revert
명령어는 되돌리고 싶은 커밋을 선택적으로 되돌리는 데 사용됩니다. 이 명령어는 새로운 커밋을 생성하여 이전 커밋의 변경 사항을 취소합니다.
git revert <commit hash>
위 명령어를 실행하면 되돌릴 커밋의 해시를 입력해야 합니다. git reflog
를 사용하여 해당 해시를 찾을 수 있습니다.
git revert
는 git reset --hard
와 달리 작업 디렉토리와 스테이징 영역의 변경 사항을 유지합니다. 즉, 되돌리는 커밋에 포함되지 않은 변경 사항은 그대로 유지됩니다.
주의 사항:
- 위 방법으로 되돌리기 전에 반드시 작업 디렉토리의 변경 사항을 백업하세요.
git reset --hard
는 커밋과 변경 사항을 영구적으로 손실시킬 수 있으므로 신중하게 사용해야 합니다.- 여러 커밋을 되돌려야 하는 경우
git revert
를 반복적으로 사용하는 것이 좋습니다.
예제 코드
시나리오:
- 현재 커밋은
HEAD
입니다. git reset --hard HEAD~1
명령어를 실수로 실행하여 이전 커밋1234567890
으로 HEAD 포인터를 이동시켰습니다.- 작업 디렉토리와 스테이징 영역의 모든 변경 사항이 손실되었습니다.
복구 단계:
git reflog
를 사용하여 HEAD@{2}의 커밋 해시를 확인합니다.
git reflog
- 확인된 커밋 해시를 사용하여
git reset
을 실행합니다.
git reset --hard 1234567890
- 작업 디렉토리의 변경 사항을 백업합니다.
# 작업 디렉토리의 변경 사항을 백업하는 명령어 입력
참고:
- 위 예제는
git reflog
을 사용하여 되돌리는 방법을 보여줍니다.git revert
를 사용하는 방법은 위의 설명을 참조하십시오. - 작업 디렉토리의 변경 사항을 백업하는 방법은 사용하는 도구에 따라 다릅니다.
git fsck
위 명령어를 실행하면 Git 저장소의 손상을 검사하고 복구합니다. 복구가 성공하면 다음과 같은 메시지가 나타납니다.
Everything looks OK.
복구가 실패하면 다음과 같은 메시지가 나타납니다.
<error message>
이 경우, git reflog
또는 git revert
를 사용하여 복구해야 할 수도 있습니다.
저장소 백업 사용하기
만약 git reset --hard
실행 이전에 저장소 백업을 가지고 있다면, 이를 사용하여 복구할 수 있습니다. 다음 단계를 따르세요.
- 백업 저장소를 복제합니다.
- 작업 디렉토리를 백업 저장소의 루트 디렉토리로 변경합니다.
git checkout -- .
명령어를 실행합니다.
이렇게 하면 작업 디렉토리가 백업 저장소의 상태로 복원됩니다.
git fsck
는 심각한 손상을 복구하지 못할 수 있습니다.- 저장소 백업을 사용하기 전에 백업이 최신인지 확인하세요.
git version-control git-reset