--hard 플래그로 Git 재설정 실행 취소

Ashok Chapagai 2023년12월11일
  1. 커밋된 변경 사항이 있었지만 git reset --hard 때문에 이제 사라졌습니다
  2. 변경 사항이 준비되었지만 커밋되지 않았습니다
  3. 변경 사항이 커밋되지도 않고 진행되지도 않음
--hard 플래그로 Git 재설정 실행 취소

때로는 특정 커밋까지 변경 사항을 재설정하고 싶을 수 있습니다. 변경 사항을 재설정하기 위해 git reset --hard <commit id> 방법을 선택했지만 --hard 플래그가 로컬 시스템에서 커밋되지 않은 변경 사항을 버리고 나중에 실수를 깨닫는 것을 잊었다고 가정합니다. 이 경우 변경 사항을 복구할 수 있는 다양한 시나리오가 있습니다.

이 문서에서는 다양한 시나리오에 따라 변경 사항을 실행 취소하는 방법을 찾을 수 있습니다.

커밋된 변경 사항이 있었지만 git reset --hard 때문에 이제 사라졌습니다

이 상황은 가장 일반적으로 발생하는 상황 중 하나이며 변경 사항을 복구하기 가장 쉬운 상황입니다. git reset --hard를 실행하고 저장소를 수정한 경우 git reflog <branchname을 실행하여 재설정을 포함하여 해당 분기에서 수행된 모든 변경 사항을 나열합니다. 출력은 다음과 같을 수 있습니다.

116daf4 dev@{0}: reset: moving to HEAD~
adf3a51 dev@{1}: commit: changed authentication method
4f7fa8c dev@{2}: commit: updated readme
5eb37ca dev@{3}: commit (initial): Initial Commit

이제 첫 번째 로그에서 dev 분기를 재설정했음을 알 수 있습니다. 이제 커밋 dev@{1} 또는 adf3a51의 변경 사항을 복구하기 위해 다음 명령을 실행할 수 있습니다.

git reset --hard adf3a51

해당 커밋까지의 변경 사항을 취소합니다.

변경 사항이 준비되었지만 커밋되지 않았습니다

단계적이지만 커밋되지 않은 변경 사항을 복구하는 것은 위의 방법보다 약간 어렵지만 여전히 가능합니다. 먼저 git fsck --lost-found 명령을 사용하여 git reset --hard 명령을 사용하기 전에 매달려 있던 모든 커밋 해시를 나열할 수 있습니다. git show <commit_hash>를 사용하여 커밋 해시가 무엇을 보유하고 있는지 확인할 수 있습니다. 재설정하려는 댕글링 커밋 해시가 있으므로 검색된 커밋 해시와 함께 git reset --hard <commit_hash 명령을 다시 사용하여 원하는 커밋에 도달합니다.

변경 사항이 커밋되지도 않고 진행되지도 않음

아직 읽고 있는데 이 방법을 우연히 발견했다면 git이 추가하거나 커밋하지 않은 변경 사항을 저장하지 않기 때문에 git reset --hard 명령을 실행 취소할 방법이 없을 수 있습니다. git reset--hard 섹션에 대한 문서를 참조하면 인덱스와 작업 트리를 재설정한다고 나와 있습니다. 이후 작업 트리에서 추적된 파일에 대한 모든 변경 사항은 삭제됩니다.

많은 번거로움 없이 해당 상태에서 데이터를 복구할 수 없을 것 같으므로 해당 상황이 발생하지 않도록 하고 사용하려는 명령과 해당 플래그도 알고 있는 것이 더 현명할 것입니다.

Ashok Chapagai avatar Ashok Chapagai avatar

Ashok is an avid learner and senior software engineer with a keen interest in cyber security. He loves articulating his experience with words to wider audience.

LinkedIn GitHub

관련 문장 - Git Reset