【전】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에서 거의 모든 작업을 취소하는 방법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Heroku H10/503 오류 해결 방법 - 이야기오후 2시 30분까지 내 이해 수준에 따라 배포할 준비가 된 내 코드 를 완성했습니다. 몇 달 전에 플랫폼에 Node.js 앱을 배포하여 을 따르기로 결정했습니다. How to solve Heroku H10 erro...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.