Annuler la réinitialisation de Git avec l'indicateur --hard
-
Il y avait des modifications validées, maintenant disparues à cause de
git reset --hard
- Les modifications ont été mises en scène mais non validées
- Les changements n’ont été ni engagés ni mis en scène
Parfois, vous souhaiterez peut-être réinitialiser les modifications jusqu’à un commit particulier. Supposons que vous optiez pour la méthode git reset --hard <commit id>
pour réinitialiser les modifications, mais que vous oubliez que le drapeau --hard
annule les modifications non validées sur le système local et que vous réalisez plus tard l’erreur. Dans ce cas, il existe différents scénarios à partir desquels vous pouvez récupérer les modifications.
Dans cet article, vous trouverez des moyens d’annuler les modifications en fonction de différents scénarios.
Il y avait des modifications validées, maintenant disparues à cause de git reset --hard
Cette situation est l’une des situations les plus courantes et la plus facile à récupérer des modifications. Si vous exécutez git reset --hard
et que vous avez apporté des modifications au référentiel, exécutez git reflog <branchname
pour répertorier toutes les modifications apportées à cette branche, y compris les réinitialisations. La sortie peut ressembler à ceci,
116daf4 dev@{0}: reset: moving to HEAD~
adf3a51 dev@{1}: commit: changed authentication method
4f7fa8c dev@{2}: commit: updated readme
5eb37ca dev@{3}: commit (initial): Initial Commit
Maintenant, nous pouvons voir que le premier journal montre que nous avons réinitialisé la branche dev
. Maintenant, pour récupérer les modifications du commit dev@{1}
ou adf3a51
, vous pouvez exécuter la commande,
git reset --hard adf3a51
Cela annulera les modifications jusqu’à ce commit.
Les modifications ont été mises en scène mais non validées
Récupérer les modifications mises en scène mais non validées est un peu plus difficile que la méthode ci-dessus, mais cela reste faisable. Tout d’abord, vous pouvez utiliser la commande git fsck --lost-found
pour répertorier tous les hachages de validation qui étaient en suspens avant d’utiliser la commande git reset --hard
. Vous pouvez utiliser git show <commit_hash>
pour voir ce que contient le hachage de validation. Maintenant que vous avez le hachage de commit suspendu que vous cherchiez à réinitialiser, utilisez à nouveau la commande git reset --hard <commit_hash
avec le hachage de commit récupéré pour accéder au commit souhaité.
Les changements n’ont été ni engagés ni mis en scène
Si vous êtes toujours en train de lire et que vous tombez sur cette méthode, il se peut qu’il n’y ait pas de moyen d’annuler la commande git reset --hard
car git ne stocke pas les modifications que vous n’y ajoutez pas ou que vous ne validez pas. Si vous vous référez à la documentation pour git reset
et la section --hard
, il est dit, réinitialise l’index et l’arborescence de travail. Toutes les modifications apportées aux fichiers suivis dans l’arborescence de travail depuis
Puisqu’il ne semble pas possible de récupérer les données de cet état sans trop de tracas, il sera plus sage de ne pas laisser cette situation se produire et de connaître la commande que vous étiez sur le point d’utiliser ainsi que ses drapeaux.