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

重置后Git提交丢失--很难。fsck未找到,不在reflog中,git,git-reset,Git,Git Reset,我想清除工作目录中一些未提交的文件,但意外地运行了git reset--hard 我意识到我丢失了上一次(未推送)提交,所以我运行了git reset--hard ORIG_HEAD。这并没有让我失去承诺 我运行了git reflog,但是那里没有列出提交。我还运行了git fsck--lost-found,但是列表中没有提交,只有一些不相关的blob和树 由于我找不到丢失的提交的任何引用(除了.git/commit\u EDITMSG,它仍然有相关的提交消息和更改列表),我不确定如何恢复提交

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

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

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

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


有没有办法找回丢失的提交,或者我应该准备通宵吗?

不知道为什么找不到提交,因为@twalberg关于
git reset--hard
的评论是正确的。不过,这里有一些东西可以尝试

您有要查找的提交的消息(
.git/commit\u EDITMSG
)。如果编写了
COMMIT\u EDITMSG
,那么特定的提交应该在某个地方。从消息中选择一些非常独特的文本,然后尝试以下操作:

git log-g--grep=“”

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

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

git日志--all--grep=“”

一旦找到提交散列,就可以签出它,创建新分支,将其合并回当前分支,等等

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


为什么您认为您的本地更改需要git提交?git重置不会丢失它。如果只有未提交的更改,则这些更改将消失。
git reset--hard
不带commit-ish参数相当于
git reset--hard HEAD
,它不会丢失提交、推送或取消推送。它将简单地将索引和工作目录重置回上次提交时的状态,从而丢失暂存和未暂存(但尚未提交)的更改。git reset--hard ORIG_HEAD可能是个问题,这取决于实际更新ORIG_HEAD的最后一个命令是什么,它是多久以前的,以及您在这段时间内做了什么…谢谢,丢失的提交是在git reset--hard@twalberg重设索引前大约半个小时完成的,在重设索引后,您如何才能看到这些提交?有没有办法将它们重新添加到索引中?@Setafire我建议您查看
git reflog
,谢谢Rob。在我发布这个问题之前,我已经搜索了git日志,但是你查看所有对象的最后一个链接成功了!不知道为什么我找不到提交。我可以找到单独的文件。