重置后Git提交丢失——硬.fsck找不到,reflog也找不到



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

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

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

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

有什么办法把丢失的提交拿回来吗?或者我应该准备熬夜吗?

不知道为什么你找不到你的提交,因为@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

最新更新