Annuler la réinitialisation de Git avec l'indicateur --hard

Ashok Chapagai 11 décembre 2023
  1. Il y avait des modifications validées, maintenant disparues à cause de git reset --hard
  2. Les modifications ont été mises en scène mais non validées
  3. Les changements n’ont été ni engagés ni mis en scène
Annuler la réinitialisation de Git avec l'indicateur --hard

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 sont ignorées.

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.

Ashok Chapagai avatar Ashok Chapagai avatar

Ashok is an avid learner and senior software engineer with a keen interest in cyber security. He loves articulating his experience with words to wider audience.

LinkedIn GitHub

Article connexe - Git Reset