在使用 git add -p 命令向索引中添加更改后,我执行了 git stash 命令,但忘记使用 --keep-index 参数。然后我愚蠢地执行了 git stash pop 命令,导致所有对索引的更改都消失了。有没有办法将索引恢复到执行 git stash 命令之前的状态?
git stash pop
命令后,输出中的最后一行是:Dropped refs/stash@{0} (ca82a6dff817ec66f44342007202690a93763949)
放弃当前所有更改(应用stash):
git reset --hard
然后使用其id重新应用stash,这次包括索引:
git stash apply ca82a6d --index
仅重置索引,这里的重点是索引作为stash的第二个父项被保存:
git reset ca82a6d^2 .
注意末尾的点号。如果您不指定它,它也会将HEAD移动到索引处(索引将显示为提交)。在这种情况下,运行git reset --soft HEAD@{1}
将HEAD返回到其上一个位置。
git stash apply --index
编辑:考虑到索引已经丢失,你应该运行 git fsck --unreachable
命令并检查它返回的最新提交。你必须能够在那里看到你丢失的索引。然后你可以使用 git cherry-pick
命令。
git stash pop --index
。 - Shadow Man
git stash apply|pop
后添加--index
参数。 - maliayas