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


当前回答

当我在做一个本地项目时,我想把它移动到GitHub上,然后创建一个新的存储库。当我试图用.gitignore将所有这些文件添加到新的存储库中时,我不小心添加了一个错误的文件,然后试图清除它。

我运行了git reset -hard origin/master

然后我所有的本地文件都被删除了,因为回购是空的。我以为一切都消失了。

这招对我很管用:

git reflog show
git reset HEAD@{1} 
git push 

其他回答

嗯,据我所知,最好的解决方案是使用IDE特性。

选择丢失文件的存储库,并右键单击它 在菜单>中查找本地历史显示历史 现在检查版本版本,你所有的文件都存在>,选择它,然后点击恢复。 这就是最可能的情况。

注意:上述解决方案适用于在任何IDE(如intelliJ)中进行更改或导入存储库。

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

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

以前的分段更改(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 .),这才有效。如果文件不在索引中,就会丢失。