Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
还原未在git中暂存的已删除文件_Git_Git Checkout_Rm_Git Revert_Git Rm - Fatal编程技术网

还原未在git中暂存的已删除文件

还原未在git中暂存的已删除文件,git,git-checkout,rm,git-revert,git-rm,Git,Git Checkout,Rm,Git Revert,Git Rm,我不小心删除了我源代码的整个目录…使用了一个漂亮的rm-r。我知道,真的很糟糕;但幸运的是,我在包含目录中有一个git repo。因此,git有一个巨大的未归档的已删除文件的更改列表。例如: "deleted: src/caronmonitor/server.py" 我如何取回这些文件?网络上到处都有这样的建议: git checkout file 或 git还原 但据我所知,这将使文件恢复到上次提交时的状态。我不想返回到上一次提交,而是返回到删除操作之前。我可以在gitk中查看我的

我不小心删除了我源代码的整个目录…使用了一个漂亮的rm-r。我知道,真的很糟糕;但幸运的是,我在包含目录中有一个git repo。因此,git有一个巨大的未归档的已删除文件的更改列表。例如:

"deleted:   src/caronmonitor/server.py" 
我如何取回这些文件?网络上到处都有这样的建议:

git checkout file

git还原

但据我所知,这将使文件恢复到上次提交时的状态。我不想返回到上一次提交,而是返回到删除操作之前。我可以在gitk中查看我的文件,就像删除之前一样;因此,这必须是可能的

是的,您应该执行
git签出文件名

如果您有多个文件,并且希望恢复所有文件,请从git目录的根目录使用
git checkout.

签出会将文件恢复到添加/提交的最新版本;如果文件尚未添加或提交,那么它将丢失

例如:

$ 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

不,GIT不会产生任何魔力。如果您没有执行或提交您的更改,那么这些更改将不复存在。 您可以看到删除,但只能将它们恢复到您告诉GIT为您记住的最后一个状态

您必须明确告诉GIT通过暂存和提交来记住您的更改。

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

    int main(argc[] args){
      System.out.println("example");
    }
这是您提交或进行的最后一次更改

现在编辑file.txt以包含以下内容:

int main(argc[] args){
 System.out.println("example");
 System.out.println("Hey I can print more lines");
}
保存文件,关闭编辑器,不使用git执行任何操作,然后执行
rm-r
现在该文件已存在,git引用了该文件,该文件已被删除,但git中该文件的内容仅为:

    int main(argc[] args){
      System.out.println("example");
    }

git不会存储任何从未添加或提交的更改。您所能做的最好的事情就是git签出已删除的目录,然后将其恢复到上次提交时的状态

git签出


您看到的本地未提交更改可能是未提交的删除,即git看到您删除了一堆文件,但您尚未提交这些文件已被删除的事实,因此git说“嘿,有一些更改(在本例中为删除)您尚未提交。”

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

我已通过
本地历史记录>显示历史记录
还原了已删除的文件,然后还原了所有已删除的文件


希望对某人有所帮助。

在删除文件之前,您是否已暂存该文件?否则git diff只会向您显示上一次提交的状态,这些提交没有被暂存。我搞砸了,我是说吉特。那么,在gitk中“本地未提交的更改,未签入索引”下的内容是上次提交时的内容吗?我知道git没有任何魔力;但似乎在gitk中,git在删除之前有一个文件副本。我还意外地从git repo中删除了一个文件,并且能够还原它,至少我认为是这样。@Vance Turner我添加了一个小例子来说明我是如何看待这一点的。
    int main(argc[] args){
      System.out.println("example");
    }