Git : A la recherche du stash perdu!

Après une manipulation hasardeuse, j’ai perdu un stash, mais alors comment diable le retrouver ?

Mon chemin vers la perdition :

      git stash
      git pull => commence un rebase, mais je ne l’ai pas vu
      git stash pop
      git rebase –abort => je ne voulais pas faire de rebase

Et là, aie aie aie, mes modifications sont perdues (j’ai fait stash pop) !

Y a-t-il un moyen de les retrouver ?
Bien sûr que oui. Git conserve tout. Un stash n’est rien d’autre qu’un commit. Il possède donc un hash, un tree, etc…

Tant que la console est ouverte, vous avez toujours le hash du commit stashé à la fin de la commande stash pop.
Il ne vous reste plus qu’a faire :

git checkout <the_hash>

Ou alors vous pouvez l’appliquer :

git cherry-pick <the_hash>

Sinon, si la console est fermée, vous pouvez passer en revue tous les dangling commit (les commit qui ne sont plus rattachés à rien) :

for hash in $(git fsck --no-reflogs | awk '/dangling commit/ {print $3}')
do
  clear
  git show $hash --name-only
  read dummy
done

Le –name-only permet de votre le message de commit et les fichiers modifiés, enlevez le pour voir également les diffs.

Have fun!
Merci à @gulhe_le_guj pour le tuyau.

Mots-clefs :

Le commentaires sont fermés.