撤销 git stash pop 后的 git reset --hard 操作

5
我尝试使用git stash pop恢复暂存中的更改,但出现了合并冲突。由于我不想解决它们,所以我决定重置。不幸的是,在一时糊涂的情况下,我执行了 git reset --hard 命令,导致之前所有的被暂存的更改都不见了。
是否有任何方法可以恢复这些更改?我已经尝试过 git fsck --cache --no-reflogs --lost-found --unreachable HEAD 命令,但列出的提交哈希值均与我需要的更改无关。我还能做什么?或者说我只能认为这些工作已经全部丢失了吗?

1
你的贮藏库不会永远丢失;它仍然存在于Git的对象数据库中……至少在一段时间内。你可能仍然能够检索到它。请参阅https://dev59.com/z18e5IYBdhLWcg3wAWjs#26192691中第2项的末尾。 - jub0bs
2个回答

9

发布内容后,我想要检查一下.git/refs/stash,因为我认为它在弹出后应该是空的。但由于合并冲突的原因,它仍然保留着我尝试弹出的stash的哈希值!

我使用哈希值执行了git stash applygit reset来以懒人的方式解决合并冲突。

如果这是一个对Git不熟悉的问题和答案,那我很抱歉。希望这能帮助其他人。


1
另外,如果您的隐藏区(stash)不再在列表中(您使用了 git stash drop 等操作),您仍然可以恢复它。请参见 https://dev59.com/NXVD5IYBdhLWcg3wGXlI#91795。 - Justin Howard

2

git help stash :

应用状态可能会因冲突而失败;在这种情况下,它不会从stash列表中删除。您需要手动解决冲突,并在之后手动调用git stash drop

因此,你认为已经消失的stash仍然在你的stash列表中,只需使用git stash list找到它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接