如何恢复git删除的文件?

时间:2010-05-06 10:41:19

标签: git

我是一个git noob,git刚刚删除了一堆重要文件。我如何让他们回来?

我的本​​地机器上有一个回购。为了进入git,我只需右键单击我的项目文件夹并选择“git bash here”。这会让我掌握所有主要内容的主人。

所以我对舞台做了一些改动,我做了:

git add .

这上演了一系列变化。我注意到我不想要其中一些上演,所以我决定我试图取消前进。我这样做了:

git reset --hard HEAD^

这基本上删除了我在上次提交时创建的一堆文件,然后跳转到了提交。

如何取回这些文件?如果我不能通过git实现它还有另一种方式吗?

5 个答案:

答案 0 :(得分:9)

我对原始建议(见编辑历史记录)有所纠正。作为忏悔,我已经找到了从git中恢复丢失文件的最简单方法:

git fsck --lost-found
ls .git/lost-found/other

不幸的是,文件名丢失了,但内容应该都是不同的文件。

答案 1 :(得分:1)

听起来你想要旧的HEAD(而不是HEAD ^),在这种情况下你可以简单地检查出那个版本。使用git reflog显示以前的HEAD并查找所需的提交,然后将其签出。

如果您想要在重置之前暂存的文件,请参阅其他答案。

答案 2 :(得分:0)

不,带

git reset --hard HEAD^

更改将恢复为上次提交并永久丢失。

答案 3 :(得分:0)

从此SO-Question


您可以(通过一些工作)在最后一个“git add < file> ”恢复文件状态。你可以使用

$ git fsck --cached --no-reflogs --lost-found --unreachable HEAD

然后检查“.git/lost-found/blob/”目录中的文件。

请阅读git fsck联机帮助页:我尚未检查上述调用。


答案 4 :(得分:0)

@tanascius 所述,您可以使用以下命令恢复已添加但未提交的文件。此命令在控制台SHA-1中打印对 blob 对象的引用。

$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD

blob 对象正是git reset命令丢失的文件。使用以下命令将其还原(不幸的是,实际文件名丢失了):

$ git show "<SHA-1 REFERENCE TO THE BLOB OBJECT HERE>" > lost_file.txt