6

我想清除一些未提交文件的工作目录,但不小心运行了git reset --hard.

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

我跑了git reflog,但那里没有列出提交。我也跑了git fsck --lost-found,但列表中没有提交,只有一些不相关的 blob 和树。

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

有什么办法可以找回丢失的提交,还是我应该为通宵做准备?

4

1 回答 1

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

于 2013-03-18T16:49:44.387 回答