我想清除工作目录中一些未提交的文件,但是不小心运行了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