一旦你知道你丢弃的隐藏提交的哈希值,你就可以将其作为一个隐藏:
git stash apply $stash_hash
或者,可以使用
git branch recovered $stash_hash
之后,您可以使用所有常规工具做任何您想做的事情。完成后,把树枝吹走。
查找哈希
如果你刚刚弹出它,并且终端仍然打开,你仍然会在屏幕上看到git stash pop打印的哈希值(谢谢,Dolda)。
否则,您可以在Linux、Unix或Windows的Git Bash中找到它:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
…或使用PowerShell for Windows:
git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] }
这将在提交图的顶端显示所有提交,这些提交不再从任何分支或标记引用——每个丢失的提交,包括您创建的每个隐藏提交,都将位于该图的某个位置。
找到您想要的隐藏提交的最简单方法可能是将该列表传递给gitk:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
…如果使用PowerShell for Windows,请查看emragins的答案。
这将启动一个存储库浏览器,显示存储库中的每一次提交,无论它是否可访问。
如果您更喜欢控制台上的图形而不是单独的GUI应用程序,那么可以用git-log-grap-online之类的东西来替换gitk。
要发现隐藏提交,请查找以下形式的提交消息:
某个分支上的WIP:commithash一些旧的提交消息
注意:如果您在执行git stash时没有提供消息,则提交消息将以这种形式出现(以“WIP on”开头)。