【전】gitreset--hard 조작을 어떻게 취소합니까

3345 단어 git
[저작권 공지]
Git에서 잃어버린 Commit 찾기
본문
Git를 사용하는 과정에서 때때로 일부 오작동, 예를 들어reset,rebase,merge 등이다.특히Commit 이후에gitreset --hard HEAD를 실행하여 로컬 기록과 파일을 서버 버전으로 강제 롤백하여 로컬에서 한 수정을 모두 Git 현재 지점의 서버 버전으로 복구하고 자신의Commit 기록도 사라졌습니다.이런 상황에 직면하면 당황하지 마라. 우리가 Git에서 한 모든 조작은 원래의 조작에서 수정한 것일 뿐이고 기록되어 저장된다. 즉, 네가 무엇을 하든지 Git에게 롤백 조작을 할 수 있다는 것이다.

Commit 찾기


다음 예제를 통해 스크롤하는 방법에 대해 알아봅니다.
$ git init
$ touch foo.txt
$ echo 'test data' >> foo.txt
$ git add foo.txt
$ git commit -m "initial commit"

$ echo 'new data' >> foo.txt
$ git commit -a -m "more stuff added to foo"

당신은 지금git의 역사 기록을 보면 두 번의 제출을 볼 수 있습니다.
$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit

이제 첫 번째 제출 상태를 초기화합니다.
$ git reset --hard b7057a9
$ git log
* b7057a9 (HEAD, master) initial commit

이것은 우리가 두 번째 제출을 잃어버린 것처럼 보이고 현지의 수정도 사라져서 되찾을 방법이 없다.하지만 리프로그는 이 문제를 해결하는 데 쓰인다.간단하게 말하면 모든 HEAD의 역사를 기록합니다. 즉, reset, checkout 등 조작을 할 때 이 조작들은reflog에 기록됩니다.
$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit

그래서 우리는 우리의 제2commit을 되찾으려면 다음과 같은 조작만 해야 한다.
$ git reset --hard 98abc5a

git 기록을 다시 한 번 보겠습니다.
$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit

동시에 로컬 대 foo.txt가 한 수정도 답장했습니다.
PS: 여기서 또 다른Commit 찾기 작업git cherry-pick 98abc5a을 언급합니다. 이 작업은 위의reset 작업과 다른 점은 후자는 단순히 98abc5a라는 Commit를 추출하여 롤백하는 것입니다. 만약에 b7057a9와 98abc5a 사이에 다른Commit 작업이 있다면 중간의 이 Commit의 수정을 무시할 수 있기 때문에 이 명령을 사용하면 파일의 충돌이 발생할 수 있습니다.
[확장 읽기]
[1] Git에서 거의 모든 작업을 취소하는 방법

좋은 웹페이지 즐겨찾기