Comment récupérer l'index après un pop stash / git stash pop?

Après avoir ajouté quelques modifications à l'index avec git add -p, j'ai alors émis un git stash mais j'ai oublié d'append –keep-index. Puis j'ai stupidement fait une pop secrète, et tous mes changements à l'index avaient disparu. Y at-il un moyen de récupérer l'index à l'état avant la cachette git?

Solutions Collecting From Web of "Comment récupérer l'index après un pop stash / git stash pop?"

Quand vous venez de faire git stash pop , la dernière ligne de la sortie est:

 Dropped refs/stash@{0} (ca82a6dff817ec66f44342007202690a93763949) 

Si vous l'avez perdu, voir Comment récupérer un cache dans Git? pour find le hash de commit.

Une fois que vous avez le hachage, soit :

  • Supprimer toutes les modifications en cours (cachette appliquée):

    git reset --hard

    Et réappliquez la cachette en utilisant son identifiant, cette fois avec index:

    git stash apply ca82a6d --index

  • Réinitialiser uniquement l'index, le point ici est que l'index est enregistré en tant que deuxième parent de la cachette:

    git reset ca82a6d^2 .

    Notez le point à la fin. Si vous ne le spécifiez pas, il déplacera également HEAD vers l'index (l'index apparaîtra comme un commit). Dans ce cas, lancez git reset --soft HEAD@{1} pour ramener la HEAD à sa position précédente.

Cela fera le travail:

 git stash apply --index 

Edit : Considérant que l'index est déjà perdu, vous devriez lancer un git fsck --unreachable et inspecter les derniers git fsck --unreachable qu'il donne. Vous devez être en mesure de voir votre index perdu là-bas. Après cela, vous pouvez git cherry-pick .