2012-03-17 136 views
16

昨天我说我在主分支上做了一些改动,我忘了添加,提交它们。并在早上我是否仍可以在git中恢复已删除的未跟踪文件?

git reset --hard 

是否有可能在这种情况下恢复被删除的文件?

+1

如果发生了什么'git的add'这些文件在某些​​时候,即使你从来没有承诺他们,他们仍然会被周围,直到他们收集的垃圾(约两周)垂下斑点。 'git fsck'会将对象列为[dangling or unreachable](https://stackoverflow.com/a/36671659/712526)。然后你可以使用'git cat-file -p deadbeef> old-file-name'来恢复它们。 – jpaugh 2017-08-23 19:36:15

+0

([Pod的答案](https://stackoverflow.com/a/45815093/712526)已经涵盖了这个,哎呀!) – jpaugh 2017-08-23 19:48:18

+0

可能重复:https://stackoverflow.com/q/25791533/712526 – jpaugh 2017-08-23 19:49:29

回答

42

一些更好的IDE会将您的文件作为本地历史记录进行跟踪。如果您从外部删除文件(例如,git reset),您应该能够在父目录的IDE上单击并选择“与本地历史记录进行比较”。

PHPStorm IDE成功使用此功能时,我未跟踪文件已经被一些实用消灭了......

+4

对于Eclipse,导航到文件所在的文件夹/包(Project Explorer或Package Explorer视图),右键单击,然后从上下文菜单中选择“从本地历史记录中恢复...”。 – 2014-12-30 22:47:00

+2

omg ...你救了我的命。我在一个零提交项目中使用'git reset --hard',这意味着'git fsck --lost-found'不起作用。幸运的是,我阅读你的答案,并在WebStorm中使用'恢复历史记录',并成功得到了擦除代码... – 2016-05-30 12:20:04

+2

总是很高兴听到我的回答贡献了一个“快乐结局”:) – 2016-05-31 05:58:49

11

否...................事实并非如此。

4

git reset --hard是一个非常危险的命令,所以要小心,当你使用它下一次:)

如果你没有犯任何这些文件,好像你就没有机会恢复。

否则,reflog命令可以帮助你。

1

,你不能访问到以前的版本从混帐未跟踪删除的文件,因为coruse,他们不存在。我会从一些备份中恢复它们(也许还有隐藏在IDE /编辑器中的备份文件?),或者,我会避免在该文件系统上工作太多,并开始搜索恢复工具。

+1

编辑好!我从文件中意外丢弃了未跟踪的更改(诅咒Github应用程序),但意识到我仍然在Atom中打开了该文件,并且可以直接点击“撤消”来恢复我的更改。 – henrebotha 2016-04-29 09:03:16

+0

@henrebotha,嗨!这只是发生在我身上,但不幸的是我没有在git硬重置时打开我的原子,你知道我可以保存的任何可能的方式。非常愚蠢的是,我在未跟踪的文件中有大量的东西。 – 2017-06-15 18:27:10

+0

@ gdad-s-river您应该仍然可以在事后打开Atom并且点击'撤消',只要您在Atom中编辑了文件。 – henrebotha 2017-06-19 06:50:50

1

git reset --hard不会删除未跟踪的文件。然而,git clean将会。

不过,如果你git add的文件,不要git commit它们,然后运行git reset --hard这些文件丢失。

但没关系,因为它们可以恢复,如this answer所示。 (那么,直到下一个git gc)。

2

注意:。的步骤似乎已经改变了一下,因为公认的答案被张贴但这个想法是一样的

要添加到接受的答案,我能使用Webstorm 2016恢复我删除的文件。

  1. 首先,我丢失了我的文件,使用git git clean -f进行强制清理。
  2. 要恢复它,我在Webstorm去了,做了以下步骤:

    • 转到项目为您的项目选项卡上,单击鼠标右键获得到“查看历史”下“地方史”。 (As shown in this picture.

    • 单击“显示历史记录”后,可以看到弹出窗口中显示“外部更改 - >恢复”。单击以恢复右侧所需的文件。(As shown in the attached picture.

    • 经过以上2个步骤后,您应该会看到您的文件回到'项目'选项卡。弹出的“本地历史”将显示如附图所示的内容。 Reverted to External Change你会得到一个选项让它添加到Git中。

    • 要解开它,只需从命令行执行git reset HEAD <filename>即可。