使用git add -p向索引添加一些更改后,我发出了一个git stash但忘了添加--keep-index。然后我愚蠢地做了一个git stash pop,我对索引的所有更改都消失了。有没有办法在git stash之前将索引恢复到状态?
答案 0 :(得分:5)
这将完成这项工作:
git stash apply --index
编辑:考虑到索引已经丢失,您应该运行git fsck --unreachable
并检查它提供的最新提交。您必须能够在那里看到丢失的索引。之后你可以git cherry-pick
。
答案 1 :(得分:4)
当您刚刚完成git stash pop
时,输出中的最后一行是:
Dropped refs/stash@{0} (ca82a6dff817ec66f44342007202690a93763949)
如果您丢失了它,请参阅How to recover a dropped stash in Git?以查找提交哈希值。
获得哈希后, :
删除所有当前更改(应用存储):
git reset --hard
使用其id重新应用存储,这次使用索引:
git stash apply ca82a6d --index
仅重置索引,此处的重点是索引保存为隐藏的第二个父级:
git reset ca82a6d^2 .
注意最后的点。如果您没有指定它,它也会将HEAD移动到索引(索引将显示为提交)。在这种情况下,运行git reset --soft HEAD@{1}
将HEAD返回到其先前的位置。