恢复未在git中暂存的已删除文件

Van*_*ner 10 git rm git-revert git-checkout git-rm

我不小心删除了我的源代码的整个目录...用一个很好的rm -r.我知道,非常糟糕; 但幸运的是,我在包含目录中有一个git repo.因此,git有一个巨大的已删除文件的非分段更改列表.例如:

"deleted:   src/caronmonitor/server.py" 
Run Code Online (Sandbox Code Playgroud)

如何获取这些文件?网上有建议:

git checkout file
Run Code Online (Sandbox Code Playgroud)

要么

git revert <commit>
Run Code Online (Sandbox Code Playgroud)

但据我所知,将在最后一次提交时将文件恢复到它的状态.我不想回到最后一次提交,而是在删除操作之前返回到右边.我可以查看gitk并查看删除之前的文件; 因此这一定是可能的.

mu *_*u 無 16

是的,你应该做一个 git checkout filename

如果您有多个文件,并希望将所有文件还原,请使用git checkout .git目录的根目录.

结帐会将文件还原到已添加/已提交的最新版本; 如果尚未添加或提交文件,则文件将丢失.

所以,例如:

$ git init && touch test1.txt test2.txt test3.txt
$ git add test1.txt && git commit -m "test1" && git add test2.txt
$ ls -a
.  .. .git test1.txt  test2.txt test3.txt

#deleting files below, 2 will be recovered, 3rd will be gone.
$ rm *
$ ls -a
.  .. .git

$ git checkout .
$ ls -a
.  .. .git test1.txt  test2.txt
#test3.txt is gone, test2.txt was recovered, even though not committed but just added
Run Code Online (Sandbox Code Playgroud)


Haw*_*ike 7

类似的事情也发生在我身上。我使用过Android Studio,但它也可以在其他JetBrains IDE中使用。

我已通过恢复已删除的文件Local history > show history,然后恢复了所有已删除的文件。

希望它能帮助某人。


Mat*_*usz 6

不,GIT 不会做任何魔术。如果您没有上演或提交更改,则这些更改将消失。您可以看到删除,但是您只能将其还原到您告诉GIT为您记住的最后状态。

您必须明确指示GIT通过登台和提交来记住您的更改。

因此,如果您的存储库中有包含内容的file.txt:

    int main(argc[] args){
      System.out.println("example");
    }
Run Code Online (Sandbox Code Playgroud)

这是您提交或上演的最后更改。

现在,您编辑file.txt使其包含以下内容:

int main(argc[] args){
 System.out.println("example");
 System.out.println("Hey I can print more lines");
}
Run Code Online (Sandbox Code Playgroud)

您保存文​​件,关闭编辑器,对git不执行任何操作,然后执行操作rm -r 现在文件已存在,并且git引用了该文件,并且该文件已被删除,但是该文件在git中的内容仅为:

    int main(argc[] args){
      System.out.println("example");
    }
Run Code Online (Sandbox Code Playgroud)