一旦你知道你弹出的暂存提交的哈希值,你可以将其应用为一个暂存:
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] }
这将向您显示提交图顶部中不再从任何分支或标记引用的所有提交 - 所有丢失的提交,包括您曾经创建的每个stash提交,都将在该图中的某个位置。
找到所需的存储提交最简单的方法可能是将该列表传递给gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
如果在Windows上使用PowerShell,请参见emragins的答案。
这将启动一个存储库浏览器,显示存储库中的每个提交记录,无论它们是否可达。
如果您喜欢控制台上漂亮的图形而不是单独的GUI应用程序,可以将其中的gitk
替换为git log --graph --oneline --decorate
之类的内容。
要查找stash提交,请查找以下形式的提交消息:
WIP on somebranch: commithash Some old commit message
注意:如果您在执行git stash
时没有提供消息,则提交消息仅以此形式(以“WIP on”开头)出现。
git stash pop
时丢失你的储藏,你可以使用git stash apply
代替。它做的与pop
相同,但不会删除已应用储藏的引用。 - Kevingit stash
。如果值得保存,那么就值得进行完整的提交(可能在单独的临时分支上)。使用git commit
,你的“stash”将更容易跟踪。首先,你可以包括提交信息。但更重要的是,即使你重置/删除了分支,你的更改也会在本地 reflog 中访问。详情请见 even if you reset/delete the branch。 - Brent Bradburngit stash push -m“我的存储消息…”
为你的git存储条目添加消息,以更好地组织它们。 - James Hoopergit stash clear
命令来清除杂乱的存储区。这个帖子帮助我恢复了存储区的提交。 - Aman