这是背景故事:
上周五,在/some-branch
做了一些工作后,我做了一个git stash save
,检查了/another-branch
,然后是git stash pop
,一切都下了地狱。在尝试恢复我藏匿的更改失败后,我关闭了终端。现在我又想这样做了。
据我了解,我存储的那些更改,如果它们不是垃圾回收的,对应于我在运行git fsck --no-reflog
时看到的dangling blob
的哈希值。那么我怎样才能弄清楚哪一个对应于上周五的那个藏匿处,以及如何让它起死回生。还是我不能,我已经失去了所有这些变化?:(
您是否尝试过从/some-branch
和/another-branch
git status
以确保更改不在工作目录中?
如果事实证明没有成效,请尝试从两个分支git fsck --unreachable
。更改可能会消失,但前提是您在存储更改之前已经执行了诸如reset
或pull
之类的操作。
你实际上是在寻找一个悬空的提交,而不是一个悬空的斑点。 如果您运行了git fsck
并且有一组(小)悬空提交,则可以使用 git cat-file -p <commit id>
检查每个提交,看看这些提交中是否有任何看起来像您存储的提交。 如果你有很多提交,那可能是很多工作。
另一种选择是,如果仍有任何存储,请运行git reflog refs/stash
以查看已创建的存储的历史记录。 不幸的是,一旦您弹出最后一个藏匿处,这些日志就会被删除,因此您可能没有它可用。
使用上述方法之一找到正确的提交 id 后,您可以git checkout <commit id>
或git branch newbranch <commit id>
直接签出提交,或创建一个指向该提交的新分支。