git 에서 잃 어 버 린 제출 을 찾 는 방법 (commt)

4928 단어 git.UPGmailGo
git 를 하 는 과정 에서 실수 가 많 을 때 필요 한 것 을 지 워 버 리 기도 한다.하지만 괜 찮 습 니 다. git 는 우리 에 게 잃 어 버 린 것 을 되 찾 을 수 있 는 안전 망 을 주 었 습 니 다.
Let’s go!
준비 하 다.
우 리 는 먼저 실험 용 창 고 를 만 들 고 그 안에 몇 개의 제출 과 가 지 를 만 들 었 다.BTW: 아래 명령 을 셸 에 직접 복사 해서 실행 할 수 있 습 니 다.mkdir recovery;cd recovery git init touch file git add file git commit -m "First commit" echo "Hello World" > file git add . git commit -m "Greetings" git branch cool_branch git checkout cool_branch echo "What up world?" > cool_file git add . git commit -m "Now that was cool" git checkout master echo "What does that mean?" >> file 삭 제 된 분기 제출 복구
지금 repo 에 branch 가 두 개 있어 요.$ git branch cool_branch * master 현재 창고 에 제출 되 지 않 은 변경 사항 저장$ git stash save "temp save" Saved working directory and index state On master: temp save HEAD is now at e3c9b6b Greetings 분기 삭제$ git branch -D cool_branch Deleted branch cool_branch (was 2e43cd5). $ git branch * master git fsck --lost-found 명령 으로 방금 삭 제 된 분기 의 제출 대상 을 찾 아 라.$git fsck --lost-found dangling commit 2e43cd56ee4fb08664cd843cd32836b54fbf594a git show 명령 으로 찾 은 대상 의 내용 을 보고 찾 은 대상 의 내용 을 봅 니 다.git show 2e43cd56ee4fb08664cd843cd32836b54fbf594a commit 2e43cd56ee4fb08664cd843cd32836b54fbf594a Author: liuhui <liuhui998[#]gmail.com> Date: Sat Oct 23 12:53:50 2010 +0800 Now that was cool diff --git a/cool_file b/cool_file new file mode 100644 index 0000000..79c2b89 --- /dev/null +++ b/cool_file @@ -0,0 +1 @@ +What up world? 이 제출 대상 은 확실히 우리 가 앞에서 삭제 한 분기 의 내용 입 니 다.다음은 우리 가 그것 을 어떻게 회복 해 야 할 지 를 고려 해 야 한다.
git rebase 로 복구 하기 $git rebase 2e43cd56ee4fb08664cd843cd32836b54fbf594a First, rewinding head to replay your work on top of it... Fast-forwarded master to 2e43cd56ee4fb08664cd843cd32836b54fbf594a. 이제 git log 명령 으로 복구 되 었 는 지 확인 합 니 다. $ git log commit 2e43cd56ee4fb08664cd843cd32836b54fbf594a Author: liuhui <liuhui998[#]gmail.com> Date: Sat Oct 23 12:53:50 2010 +0800 Now that was cool commit e3c9b6b967e6e8c762b500202b146f514af2cb05 Author: liuhui <liuhui998[#]gmail.com> Date: Sat Oct 23 12:53:50 2010 +0800 Greetings commit 5e90516a4a369be01b54323eb8b2660545051764 Author: liuhui <liuhui998[#]gmail.com> Date: Sat Oct 23 12:53:50 2010 +0800 First commit 제출 은 되 찾 는 것 이지 만 가 지 는 되 찾 을 수 없습니다. liuhui@liuhui:~/work/test/git/recovery$ git branch * master git merge 로 복구
우 리 는 방금 복구 한 제출 을 삭제 했다. $ git reset --hard HEAD^ HEAD is now at e3c9b6b Greetings 방금 지 운 것 을 다시 찾 아 오 너 라. git fsck --lost-found dangling commit 2e43cd56ee4fb08664cd843cd32836b54fbf594a 하지만 이번 에는 합병 명령 으로 복구 합 니 다. $ git merge 2e43cd56ee4fb08664cd843cd32836b54fbf594a Updating e3c9b6b..2e43cd5 Fast-forward cool_file | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 cool_file git stash 복구
앞에서 우 리 는 git stash 로 제출 하지 않 은 내용 을 저장 하 였 는데, 만약 이 저장 소 가 부주의 로 삭제 되면 어떻게 합 니까?
현재 repo 에 저 장 된 저장 소: $git stash list stash @ {0}: On master: temp save
비 워 두 기: $git stash clearliuhui@liuhui:~/work/test/git/recovery$ git stash list
git fsck – lost - found 로 다시 찾 아 오기: $git fsck – lost - found dangling commit 674 c0618ca7d0c251902f 0953987 ff 71860 cb 067
git show 로 돌아 온 내용 이 맞 는 지 확인 해 보 세 요.$git show 674c0618ca7d0c251902f0953987ff71860cb067 commit 674c0618ca7d0c251902f0953987ff71860cb067 Merge: e3c9b6b 2b2b41e Author: liuhui <liuhui998[#]gmail.com> Date: Sat Oct 23 13:44:49 2010 +0800 On master: temp save diff --cc file index 557db03,557db03..f2a8bf3 --- a/file +++ b/file @@@ -1,1 -1,1 +1,2 @@@ Hello World ++What does that mean? 문제 가 없 을 것 같 습 니 다. 좋 습 니 다. 그럼 회복 하 겠 습 니 다.$ git merge 674c0618ca7d0c251902f0953987ff71860cb067 Merge made by recursive. file | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) 비고
이 글 의 주요 내용 은 여기 서 나온다. The illustrated guide to recovering lost commits with Git 나 는 정리 하 는 일 을 했다.
만약 문장의 일부 명령 에 대해 익숙 하지 않다 면 참고 할 수 있다 Git Community Book 중국어 버 전
사실 여기 서 가장 중요 한 명령 은 git fsck – lost - found 입 니 다. git 에서 commt 를 삭제 한 후에 실제 삭제 가 아니 라 허공 대상 (dangling commt) 이 되 었 기 때 문 입 니 다.우 리 는 이 허공 에 떠 있 는 대상 (dangling comit) 을 찾 아 git rebase 을 사용 하 든 git merge 을 사용 하 든 회복 할 수 있다.

좋은 웹페이지 즐겨찾기