Astuce Git: Revenir à un commit précédent

Vous vous êtes sans doute déjà retrouvé dans le scénario suivant. Vous travaillez sur un repository Git hébergé sur GitHub ou GitLab. En local, vous venez de commit vos modifications, puis vous vous rendez compte que c’était une erreur. Vous vous êtes trompé de branche, vous avez commit des fichiers qu’il ne fallait pas, ou toute autre raison.

Annuler le dernier commit git

L’état de votre projet Git est donc similaire à ce schéma:

La branche master en local comporte le commit de trop

Vous avez plusieurs possibilités lorsqu’il s’agit de revenir à un état précédent:

Supprimer définitivement le dernier commit

Attention, cette méthode supprimera définitivement toutes les modifications en cours ainsi que les modifications du dernier commit.

git reset --hard HEAD~1

Supprimer le dernier commit mais garder les modifications

Si vous voulez supprimer le dernier commit mais garder les modifications dans le repo git pour ajuster ce que vous voulez commit, utilisez plutôt l’attribut --soft :

git reset --soft HEAD~1

Revenir à un commit précédent

Si vous avez effectué plusieurs commits que vous voulez annuler, il existe des méthodes pour revenir à un commit en particulier.

Tout d’abord, repérez le commit sur lequel revenir:

$ git log --pretty=oneline

3396763626316124388f76be662bd941df591118 Ajouter fichier innutile
c73bbc98b5f55e5a4dbfee8e0297e4e1652a0687 Commit la mite
9cf95dacd226dcf43da376cdb6cbba7035218921 Dernier commit OK
4cc67b53df14444b20026e799bdeb70e3117890e Fonctionnalité géniale

Vous voulez donc revenir au commit nommé « Dernier commit OK ». Il existe aussi plusieurs méthodes pour garder ou non les modifications des commits supprimés.

Supprimer définitivement les modifications

Pour revenir au commit désiré en supprimant toutes les modifications faites entre temps, rien de plus simple:

git reset --hard 9cf95dacd226dcf43da376cdb6cbba7035218921 

Cette commande réinitialise l’état du repo local au niveau du commit passé en paramètres.

Revenir temporairement à un commit précédent

Pour garder les modifications mais retrouver l’état d’un commit précédent, c’est très simple. On utilise la commande checkout. De la même manière que pour l’exemple précédent, on a besoin du hash du commit visé:

git checkout 9cf95dacd226dcf43da376cdb6cbba7035218921 

Vous allez arriver dans un état dit de tête détachée. Le repo n’est plus à proprement parlé sur une branche, mais sur un commit en particulier. Pour revenir sur la branche et retrouver tous les derniers commits, il suffit de réutiliser checkout:

# Si pour aller vers une branche en particulier :
git checkout master

# Pour retourner sur la dernière branche :
git checkout - 

Ici, on récupère le dernier état de la branche master, mais à remplacer avec le nom de la branche que vous voulez récupérer

Annuler un commit par un commit inverse

Des fois, il est nécessaire de garder l’historique git quand on annule un commit. Rien de plus simple avec la commande revert:

# Inverser un commit :
git revert c73bbc98b5f55e5a4dbfee8e0297e4e1652a0687 

# Inverser plusieurs commits :
git revert c73bbc98b5f55e5a4dbfee8e0297e4e1652a0687 3396763626316124388f76be662bd941df591118 9cf95dacd226dcf43da376cdb6cbba7035218921 

# On peut aussi utiliser un interval. La commande suivante va supprimer les 2 derniers commits :
git revert HEAD~2..HEAD

Ces commandes vont créer un nouveau commit qui contiendra l’annulation du ou des commits voulus.

Pensez à pousser vos modifications !

Une fois vos modifications terminées, pensez à les envoyer au remote en lançant un git push

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *