14

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

"deleted:   src/caronmonitor/server.py" 

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

git checkout file

或者

git revert <commit>

但据我了解,这会将文件恢复到上次提交时的状态。我不想回到最后一次提交,而是回到删除操作之前。我可以查看 gitk 并查看删除前的文件;因此这必须是可能的。

4

5 回答 5

19

是的,你应该做一个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
于 2014-07-23T13:33:55.640 回答
7

不,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");
    }
于 2014-07-23T13:38:23.550 回答
2

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

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

希望它可以帮助某人。

于 2020-01-17T18:40:34.657 回答
1

git 不会存储任何从未添加或提交的更改。您能做的最好的事情是 git checkout 删除的目录,您将把它恢复到上次提交时的状态。

git checkout <branch_you_are_in> <directory_of_all_your_source_code>

您看到的本地未提交的更改可能是未提交的删除,即 git 看到您已经删除了一堆文件,但您还没有提交它们被删除的事实,所以 git 说'嘿,有一些更改(在这种情况下,删除)你还没有提交。

于 2014-07-23T18:47:37.693 回答
1

我已经在 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
于 2021-08-06T08:36:07.400 回答