Как восстановить индекс после git stash / git stash pop?

после добавления некоторых изменений в индекс с помощью git add-p я выпустил git stash, но забыл добавить --keep-index. Затем я глупо сделал git stash pop, и все мои изменения в индексе исчезли. Есть ли способ восстановить индекс в состояние до git stash?

2 ответов


когда вы только что сделали git stash pop последняя строка в выводе:

Dropped refs/stash@{0} (ca82a6dff817ec66f44342007202690a93763949)

если вы потеряли его, см. как восстановить упавшую заначку в Git? чтобы найти хэш фиксации.

если у вас есть хэш, или:

  • отбросьте все текущие изменения (примененный Сташ):

    git reset --hard

    и повторно применить тайник, используя его идентификатор, на этот раз с индекс:

    git stash apply ca82a6d --index

  • сбросить только индекс, дело здесь в том, что индекс сохраняется как второй родитель тайника:

    git reset ca82a6d^2 .

    обратите внимание на точку в конце. Если вы не укажете его, он также переместит HEAD в индекс (индекс будет отображаться как фиксация). В этом случае run git reset --soft HEAD@{1} вернуть голову в прежнее положение.


это сделает работу:

git stash apply --index

редактировать: учитывая, что индекс уже потерян, вы должны запустить git fsck --unreachable и проверьте последние коммиты, которые он дает. Вы должны видеть свой потерянный индекс. После этого вы можете git cherry-pick его.