我想清除一些未提交文件的工作目录,但是意外地运行了git reset --hard
。
我意识到我丢失了之前的(未推送)提交,因此我运行了git reset --hard ORIG_HEAD
。这并没有让我失去承诺。
我运行git reflog
,但提交没有列在那里。我也运行了git fsck --lost-found
,但是列表中没有提交,只有少数不相关的blob和树。
由于我找不到丢失提交的任何引用(除了仍然有相关提交消息和更改列表的.git/COMMIT_EDITMSG
之外),我不确定如何恢复提交。
有没有办法让丢失的提交回来,或者我应该为全明星做好准备吗?
答案 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>"
找到提交哈希后,您可以查看它,创建一个新分支,将其合并回当前分支等。
但是,如果全部失败,您可以尝试查看存储库中的对象,但不是任何提交的一部分(例如,添加到索引中,但未提交。)此答案可以帮助您: