有没有办法从git重置中恢复未提交的更改到工作目录-hard HEAD?


当前回答

(适用于部分用户的答案)

如果你使用的是(最近的)macOS,即使你没有使用时间机器磁盘,操作系统也会每小时保存一次备份,称为 当地的快照。

进入时间机器,导航到你丢失的文件。操作系统会问你:

The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?

你应该能够恢复你丢失的文件。

其他回答

一般来说,您无法返回未提交的更改。

以前的分段更改(git add)应该可以从索引对象中恢复,所以如果你这样做了,使用git fsck——lost-found来定位与它相关的对象。(这将对象写到.git/lost-found/目录;从那里你可以使用git show <filename>来查看每个文件的内容。)

如果没有,答案是:看看你的备份。也许你的编辑器/IDE将临时拷贝存储在/tmp或C:\ temp之类的目录下

git reset HEAD@{1}

这将恢复到前一个HEAD

[1] vim例如,可选地存储持久撤销,eclipse IDE存储本地历史;这样的功能可能会节省你的**

我发现在git重置之前任何未提交的文件——hard <commit>会从git历史中删除。然而,我很幸运,在我紧张的整个过程中,我一直保持我的代码编辑器会话打开,我发现在每个受影响的文件中,一个简单的控件+ z将文件的状态返回到Git重置之前的版本,所以我没有特别要求它重置所有内容。万岁! !

我不小心运行git重置-对我的回购今天也很难,而今天也有未提交的更改。为了找回它,我运行git fsck——lost-found,它将所有未引用的blobs写入<path To repo>/.git/lost-found/。由于文件未提交,我在<路径repo>/.git/lost-found/的另一个目录中找到了它们。从那里,我可以使用git show <filename>看到未提交的文件,复制出blob,并重命名它们。

注意:只有当你将想要保存的文件添加到索引中时(使用git add .),这才有效。如果文件不在索引中,就会丢失。

如果你幸运地有相同的文件打开在另一个编辑器(例如。Sublime Text)试试按ctrl-z键。它救了我。

我刚刚做了git重置-困难和丢失了所有未提交的更改。幸运的是,我使用了一个编辑器(IntelliJ),我能够从本地历史记录中恢复更改。Eclipse应该允许您做同样的事情。