一旦您知道您删除的存储提交的哈希值,您就可以将其应用为存储:
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}'
...或使用适用于 Windows 的 Powershell:
git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] }
这将在提交图的提示处向您显示不再从任何分支或标签引用的所有提交——每个丢失的提交,包括您曾经创建的每个存储提交,都将在该图中的某个位置。
找到您想要的存储提交的最简单方法可能是将该列表传递给gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
...或者如果使用 Windows 的 Powershell,请参阅emragins 的答案。
这将启动一个存储库浏览器,向您显示存储库中的每一次提交,无论它是否可访问。
如果您更喜欢控制台上的漂亮图形而不是单独的 GUI 应用程序,则可以将其替换gitk
为类似的东西。git log --graph --oneline --decorate
要发现 stash 提交,请查找以下形式的提交消息:
在某个分支上的 WIP :commithash一些旧的提交消息
注意:如果您在提供消息时没有提供消息,则提交消息只会采用这种形式(以“WIP on”开头)git stash
。