J’essayais de résoudre un problème dans git et j’utilisais accidentellement git reset –hard pour un commit précédent. Alors maintenant je ne peux pas revenir à la vieille tête.
Cependant, j’ai cloné le repository avant de le faire, et j’ai donc renvoyé les commits manquants à l’original. Cela a semblé fonctionner hier, mais aujourd’hui je vois que l’original est toujours bloqué sur un ancien commit et que les nouveaux n’existent apparemment pas. Essayer de repousser les nouveaux commits du clone ne fonctionne plus, car git me dit que tout est à jour.
Comment puis-je réparer ça?
Pour remettre votre HEAD au bon endroit:
git reflog
pour obtenir une liste des endroits où HEAD a été récemment. git show sha1
pour trouver l’endroit que vous voulez que votre tête soit. git merge
pour ramener votre master au bon endroit. Quelques explications: Dans un commit git
il n’y a rien qui pointe sur celui que l’on commet après celui-ci. Lorsque vous réinitialisez le HEAD, vous l’avez dirigé vers un ancien commit. Votre ancien chef est en train de balancer sans rien montrer.
Nous utilisons le reflog
pour voir où HEAD a été récemment. Une fois que vous êtes revenu à l’endroit où vous le souhaitez, vous pointez le maître, ou un autre, vers cet endroit et tout va bien!
Je l’ai fait un peu différemment. J’ai fait…
git reflog 3bd79d2 HEAD@{2}: checkout: moving from edbfb06528c43586a0e0e10a73051e06980b9281 to master edbfb06 HEAD@{3}: commit: added general comments for rubric f8ca172 HEAD@{4}: checkout: moving from 904d63bf08f6f6b1494bfa473b158b9509b18423 to 904d63b HEAD@{10}: commit: updated results page and csv 933f2a6 HEAD@{11}: commit: updates f56e6cd HEAD@{12}: clone: from [email protected]:xxxx.git
… dans ce cas, mon “commentaire général ajouté pour la rubrique” était le commit que j’ai perdu. Maintenant que j’ai l’ID de validation, j’ai utilisé cherry-pick pour le récupérer …
git cherry-pick edbfb06
Vous ne devriez pas avoir à pousser quoi que ce soit depuis un autre repo après un git reset --hard
.
git reflog
devrait vous permettre de localiser les commits perdus (qui sont en fait non référencés, mais toujours présents dans votre repository Git, par défaut jusqu’à 90 jours: voir git config gc.reflogexpire
. Vous pouvez même vous assurer qu’il n’expire jamais si vous le voulez vraiment) ).
Voir par exemple Annuler une git reset --hard HEAD~1
ou restore – git reset --hard HEAD^
comme exemples.
Essayez de taper git fetch
pour obtenir le référentiel mis à jour