How to recover the index after a git stash / git stash pop?

冷暖自知 提交于 2019-12-05 17:55:44

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!