2010-05-06 97 views
4

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

我在本地机器上有一个回购。为了进入git,我只需右键单击我的项目文件夹并选择“git bash here”。这引起了我所做的所有选择。

所以我有一些变化阶段,我做:

git add . 

此上演了一堆的变化。我注意到,我不想要其中的一些上演,所以我决定,我会试图取消everthing。我这样做:

git reset --hard HEAD^ 

这基本上删除了一堆我上次提交并跳到提交前的文件。

如何获取这些文件?如果我不能通过git做到这一点有另一种方式?

+0

http://stackoverflow.com/questions/1108853/recovering-added-file-after-doing-git-reset-hard-head – tanascius 2010-05-06 10:47:38

回答

9

我对我的原始建议进行了更正(请参阅编辑历史记录)。作为忏悔,我已经找到了最简单的方法,从git的恢复丢失的文件:

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

不幸的是,文件名都输了,但内容都应该有作为不同的文件。

+1

可能的重复他使用'git add .' ...所以他应该是能够恢复 – tanascius 2010-05-06 11:03:07

+0

fsck会影响我的回购吗?因为我已经做了: git reset --hard {removed head} 找回一些变化。但我仍然需要恢复我的无限改变 – Ryan 2010-05-06 15:17:30

+0

如果您担心的是,只需使用git以外的其他备份整个回购。但我不认为fsck会损害任何东西。 – 2010-05-06 22:57:03

1

不,与

git reset --hard HEAD^ 

更改将恢复到最后一次提交和永久丢失。

+1

他用过'git add .' ...所以他应该能够恢复 – tanascius 2010-05-06 11:03:28

0

从这个SO-Question


你可以(有一些工作)在最后恢复文件的状态 “混帐添加<文件>”。您可以使用

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

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

请阅读git fsck manpage:我没有检查过上面的调用。


1

这听起来像你想的老人头(相对于HEAD ^),在这种情况下,你可以简单地检查出那个版本。使用git reflog显示以前的HEAD并查找所需的提交,然后检查出来。

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

+0

好的建议 - 当然reflog将有助于恢复最后的提交...与我的fsck解决方案一起,他应该能够恢复所有文件。 – tanascius 2010-05-06 20:02:06