Как восстановить индекс после 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
его.