簡體   English   中英

如何恢復用“ git rm *”刪除的文件?

[英]How to restore files deleted with “git rm *”?

偶然我使用git rm *在本地倉庫上第一次提交后刪除了所有文件。

Git提交

git commit -m 'IF ELSE'
[master fc9895a] IF ELSE
 14 files changed, 3234 insertions(+)
 create mode 100644 Lecture 03 - Bootstrapping.ppt
 create mode 100644 Makefile
 create mode 100644 codegenerator.cpp
 create mode 100644 error.cpp
 create mode 100644 error.h
 create mode 100644 includelex.h
 create mode 100644 includeyacc.h
 create mode 100644 lexrule.l
 create mode 100644 rule.tab.c
 create mode 100644 stable.h
 create mode 100644 symboletable.cpp
 create mode 100644 test.c
 create mode 100644 yaccrule.y
 create mode 100644 yaccrule2.y

git rm *
rm 'Lecture 03 - Bootstrapping.ppt'
rm 'Makefile'
rm 'README.md'
rm 'codegenerator.cpp'
rm 'error.cpp'
rm 'error.h'
rm 'includelex.h'
rm 'includeyacc.h'
rm 'lexrule.l'
rm 'rule.tab.c'
rm 'stable.h'
rm 'symboletable.cpp'
rm 'test.c'
rm 'yaccrule.y'

我用來恢復的命令序列。

git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    Lecture 03 - Bootstrapping.ppt
    deleted:    Makefile
    deleted:    README.md
    deleted:    codegenerator.cpp
    deleted:    error.cpp
    deleted:    error.h
    deleted:    includelex.h
    deleted:    includeyacc.h
    deleted:    lexrule.l
    deleted:    rule.tab.c
    deleted:    stable.h
    deleted:    symboletable.cpp
    deleted:    test.c
    deleted:    yaccrule.y
    deleted:    yaccrule2.y

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .hg/


git reset --hard HEAD^1
HEAD is now at 9b72b0c first commit


git reset --hard HEAD
HEAD is now at 9b72b0c first commit


 git checkout
 Your branch is up-to-date with 'origin/master'.


 git reset HEAD test.c
 git reset HEAD  Makefile
 git reset HEAD --  Makefile

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .hg/

我無法在Ubuntu 14.10,git版本2.1.0上還原文件。 有沒有一種方法可以還原文件?

偵探工作

根據您對問題的描述,在遇到麻煩之前,您的倉庫的歷史記錄必須包含兩次提交:

9b72b0c first commit
fc9895a IF ELSE (HEAD, master)

證據

  • 有關第二次提交的信息在以下命令的輸出中

     git commit -m 'IF ELSE' 
  • 輸出

     git reset --hard HEAD^1 

    (此命令重置當前分支到當前提交的 )表示的母體fc9895a具有SHA 9b72b0c和消息first commit

將分支重置為所需狀態

由於您在運行git rm *之后尚未進行任何本地更改,因此您所要做的只是回到執行IF ELSE提交后存儲庫所在的狀態。

幸運的是,您仍然記錄了該提交的短SHA: fc9895a 因此,

git reset --hard fc9895a

是使您擺脫困境的命令。

說明

git-reset用於將當前分支(此處為master )重置為指定狀態(此處為fc9895a )。

git-reset手冊頁描述了--hard標志,因此:

--hard

重置索引和工作樹。 <commit>以來,工作樹中跟蹤文件的任何更改都將被丟棄。

(請謹慎使用!)

是一個很好的介紹git-reset工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM