重置后Git提交丢失 - 硬。 fsck找不到,不在reflog中找到

时间:2013-03-18 14:40:01

标签: git git-reset

我想清除一些未提交文件的工作目录,但是意外地运行了git reset --hard

我意识到我丢失了之前的(未推送)提交,因此我运行了git reset --hard ORIG_HEAD。这并没有让我失去承诺。

我运行git reflog,但提交没有列在那里。我也运行了git fsck --lost-found,但是列表中没有提交,只有少数不相关的blob和树。

由于我找不到丢失提交的任何引用(除了仍然有相关提交消息和更改列表的.git/COMMIT_EDITMSG之外),我不确定如何恢复提交。

有没有办法让丢失的提交回来,或者我应该为全明星做好准备吗?

1 个答案:

答案 0 :(得分:10)

不确定为什么你无法找到你的提交,因为@ twalberg关于git reset --hard的评论是正确的。不过,以下是一些可以尝试的事情。

您收到了正在寻找的提交的消息(.git/COMMIT_EDITMSG)。如果写了COMMIT_EDITMSG,那么该特定提交应该某处。从消息中挑选一些相当独特的文本并尝试:

git log -g --grep="<something specific from your commit message>"

它将通过reflog并查找与丢失的提交消息中的文本匹配的提交。

如果没有运气,你可以尝试查看每个分支上的所有提交:

git log --all --grep="<something specific from your commit message>"

找到提交哈希后,您可以查看它,创建一个新分支,将其合并回当前分支等。

但是,如果全部失败,您可以尝试查看存储库中的对象,但不是任何提交的一部分(例如,添加到索引中,但未提交。)此答案可以帮助您:

https://stackoverflow.com/a/7376959/845716