问题
After adding some changes to the index with git add -p, I then issued a git stash but forgot to add --keep-index. Then I stupidly did a git stash pop, and all my changes to the index were gone. Is there a way to recover the index to the state before the git stash?
回答1:
When you've just done git stash pop
, the last line in the output is:
Dropped refs/stash@{0} (ca82a6dff817ec66f44342007202690a93763949)
If you've lost it, see How to recover a dropped stash in Git? to find the commit hash.
Once you have the hash, either:
Drop all current changes (applied stash):
git reset --hard
And reapply the stash using its id, this time with index:
git stash apply ca82a6d --index
Reset only the index, the point here is that the index is saved as a second parent of the stash:
git reset ca82a6d^2 .
Notice the dot at the end. If you don't specify it, it'll also move HEAD to the index (the index will appear as a commit). In this case run
git reset --soft HEAD@{1}
to return the HEAD to its previous position.
回答2:
This will do the job:
git stash apply --index
Edit: Considering the index is already lost, you should run a git fsck --unreachable
and inspect the latest commits it gives. You must be able to see your lost index there. After that you can git cherry-pick
it.
来源:https://stackoverflow.com/questions/14264467/how-to-recover-the-index-after-a-git-stash-git-stash-pop