etc./StackOverFlow

'git reset'을 취소하는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2022. 2. 15. 08:49
반응형

질문자 :Andriy Drozdyuk


실행 취소하는 가장 간단한 방법은 무엇입니까?

 git reset HEAD~

현재 내가 생각할 수 있는 유일한 방법은 원격 저장소에서 git clone http://...



짧은 답변:

 git reset 'HEAD@{1}'

긴 대답:

Git은 모든 참조 업데이트(예: 체크아웃, 재설정, 커밋, 병합)의 로그를 유지합니다. 다음을 입력하여 볼 수 있습니다.

 git reflog

이 목록의 어딘가에 잃어버린 커밋이 있습니다. git reset HEAD~ 입력하고 실행 취소하려고 한다고 가정해 보겠습니다. 내 reflog는 다음과 같습니다.

 $ git reflog 3f6db14 HEAD@{0}: HEAD~: updating HEAD d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c [...]

첫 번째 줄은 HEAD 0 이전 위치(즉, 현재 위치)가 3f6db14임을 나타냅니다. HEAD~ 로 재설정하여 얻었습니다. 두 번째 줄은 HEAD 1 이전 위치(즉, 재설정 전 상태)가 d27924e임을 나타냅니다. 특정 커밋을 확인하여 얻었습니다(지금은 중요하지 않지만). 따라서 재설정을 취소하려면 git reset HEAD@{1} (또는 git reset d27924e )를 실행합니다.

반면에 HEAD를 업데이트한 이후로 다른 명령을 실행했다면 원하는 커밋이 목록의 맨 위에 있지 않고 reflog 통해 검색해야 합니다.

HEAD 보다 재설정하려는 특정 분기(예: master) reflog 를 보는 것이 더 쉬울 수 있습니다.

 $ git reflog show master c24138b master@{0}: merge origin/master: Fast-forward 90a2bf9 master@{1}: merge origin/master: Fast-forward [...]

HEAD reflog 보다 노이즈가 적어야 합니다.


Mark Lodato

오래된 질문과 게시 된 답변이 훌륭하게 작동합니다. 그래도 다른 옵션을 선택하겠습니다.

git reset ORIG_HEAD

ORIG_HEAD HEAD 이전에 참조한 커밋을 참조합니다.


Dan Fischer

내 상황은 약간 달랐습니다. 나는 git reset HEAD~ 세 번 했습니다.

그것을 취소하기 위해 나는해야했다

 git reset HEAD@{3}

그래서 당신은 할 수 있어야합니다

 git reset HEAD@{N}

그러나 다음을 사용하여 git reset을 수행한 경우

 git reset HEAD~3

당신은 할 필요가있을 것입니다

 git reset HEAD@{1}

{N} 은 Mark가 주석에서 지적한 대로 reflog의 작업 수를 나타냅니다.


zainengineer

1. git reflog 를 사용하여 모든 참조 업데이트를 가져옵니다.

2. git reset <id_of_commit_to_which_you_want_restore>


omilus

출처 : http:www.stackoverflow.com/questions/2510276/how-to-undo-git-reset

반응형