Réponse courte:
git reset 'HEAD@{1}'
Longue réponse:
Git conserve un journal de toutes les mises à jour de référence (par exemple, extraction, réinitialisation, validation, fusion). Vous pouvez le voir en tapant:
git reflog
Quelque part dans cette liste se trouve le commit que vous avez perdu. Disons que vous venez de taper git reset HEAD~
et que vous souhaitez l'annuler. Mon reflog ressemble à ceci:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
La première ligne indique qu'il y a HEAD
0 positions (en d'autres termes, la position actuelle) est 3f6db14; il a été obtenu en remettant à zéro HEAD~
. La deuxième ligne indique qu'il y a HEAD
1 position (en d'autres termes, l'état avant la réinitialisation) est d27924e. Il a été obtenu en vérifiant un commit particulier (bien que ce ne soit pas important pour le moment). Donc, pour annuler la réinitialisation, exécutez git reset HEAD@{1}
(ou git reset d27924e
).
Si, d'autre part, vous avez exécuté d'autres commandes depuis cette mise à jour de HEAD, la validation que vous souhaitez ne sera pas en haut de la liste, et vous devrez rechercher dans le reflog
.
Une dernière remarque: il peut être plus facile de rechercher la reflog
branche spécifique que vous souhaitez annuler la réinitialisation, par exemple maître, plutôt que HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Cela devrait avoir moins de bruit que le général HEAD reflog
.