如何在git stash/git stash pop后恢复索引?

Wat*_*com 10 git git-stash

在使用git add -p向索引添加一些更改后,我发出了一个git stash,但忘了添加--keep-index.然后我愚蠢地做了一个git stash pop,我对索引的所有更改都消失了.有没有办法在git stash之前将索引恢复到状态?

use*_*ser 7

完成后git stash pop,输出中的最后一行是:

Dropped refs/stash@{0} (ca82a6dff817ec66f44342007202690a93763949)
Run Code Online (Sandbox Code Playgroud)

如果您丢失了它,请参阅如何在 Git 中恢复丢失的存储?找到提交哈希。

一旦你有了哈希,要么:

  • 删除所有当前更改(应用的存储):

    git reset --hard

    并使用其 id 重新应用存储,这次使用索引:

    git stash apply ca82a6d --index

  • 仅重置索引,这里的重点是将索引保存为 stash 的第二个父级:

    git reset ca82a6d^2 .

    注意末尾的点。如果您不指定它,它也会将 HEAD 移动到索引(索引将显示为提交)。在这种情况下,运行git reset --soft HEAD@{1}将 HEAD 返回到其先前的位置。


mal*_*yas 5

这将完成工作:

git stash apply --index
Run Code Online (Sandbox Code Playgroud)

编辑:考虑到索引已经丢失,您应该运行git fsck --unreachable并检查它给出的最新提交。您必须能够在那里看到丢失的索引。之后就可以git cherry-pick了。