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

时间:2014-07-23 13:28:45

标签: git git-checkout rm git-revert git-rm

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

"deleted:   src/caronmonitor/server.py" 

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

git checkout file

git revert <commit>

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

4 个答案:

答案 0 :(得分:16)

是的,您应该git checkout filename

如果您有多个文件,并希望将所有文件还原,请使用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

答案 1 :(得分:6)

不是,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");
}

您保存文件,关闭编辑器,不执行任何操作并执行rm -r 现在文件就在那里,git引用了文件并且它已被删除但是git中这个文件的内容只是:

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

答案 2 :(得分:0)

git不会存储任何从未添加或提交的更改。你可以做的最好的事情是git checkout删除了目录,然后你将它恢复到上次提交内容时的状态。

git checkout <branch_you_are_in> <directory_of_all_your_source_code>

您看到的本地未提交的更改可能是未提交的删除,即git看到您已删除了一堆文件,但您还没有承认它们已被删除,因此git说嘿,你还没有做出一些改变(在这种情况下,删除)。&#39;

答案 3 :(得分:0)

我在 Eclipse IDE 中打开了文件,所以为了恢复我通过 git checkout 意外丢失的更改,我在 Eclipse IDE 中按照以下建议进行了操作。

https://www.oreilly.com/library/view/eclipse-cookbook/0596007108/ch04s08.html 4.7.从本地历史恢复元素和文件

您还可以通过在视图(例如包资源管理器)中右键单击整个文件并选择以下菜单项之一,将整个文件恢复到以前的版本:

替换为→ 本地历史中的上一个

Replaces the file with the previous version in local history

替换为→ 本地历史

Replaces the file with a version you select from local history

从本地历史恢复

Restores a file from local history