Revert Git : revenir à une version antérieure de votre repo Git en annulant un commit

Le logiciel de gestion de versions git offre de nombreuses possibilités dans la gestion des changements qui sont effectués sur un répertoire de travail. Il est possible de revenir à une version antérieure de son travail.

La première chose à faire pour revenir à une version antérieure est d'abord de repérer cette version. La commande git log liste les différents commit (enregistrements) effectués. La chaîne de caractères situé à côté du mot commit permet d'identifier l'enregistrement. Elle sera utilisée dans toutes les commandes nécessitant un numéro d'enregistrement :

commit 3u38t0qn00p1sr1o8012r16kp2nsxcmul1w426w5
Author: Moi
Date: Mon Aug 1 10:00:00 2016 -0400

La démarche est ensuite différente selon votre situation. Elle dépend du travail que vous souhaitez effectuer à partir de cette version antérieure mais aussi des commits effectués depuis.

Si vous souhaitez simplement visualiser ou copier des lignes de code sans apporter aucune modification, il faut utiliser la commande git checkout en spécifiant le numéro du commit. Le répertoire de travail sera alors mis à jour pour correspondre à la version spécifiée :

git checkout 3u38t0qn00p1sr1o8012r16kp2nsxcmul1w426w5

Il est possible de créer une nouvelle branche à partir de cette version grâce à la commande git checkout :

git checkout -b old-state 3u38t0qn00p1sr1o8012r16kp2nsxcmul1w426w5

Pour revenir à la version actuelle de votre répertoire de travail, il faudra refaire un check-out.

Il est possible de revenir en arrière et de supprimer toutes les modifications qui ont été enregistrées depuis la révision mais la commande ne sera pas la même si vous ayez publié les commits ou non.

Si vos commits n'ont pas été publiés, il suffit de revenir à la version antérieure du répertoire de travail grâce à la commande git reset :

git reset --hard 3u38t0qn00p1sr1o8012r16kp2nsxcmul1w426w5

Si vous possédez des modifications non enregistrées dans votre répertoire de travail et que vous souhaitez les conserver, il faut exécuter en plus la commande get stash.

git stash #sauvegarde les modifications
git reset --hard 3u38t0qn00p1sr1o8012r16kp2nsxcmul1w426w5 #remet à zéro le répertoire de travail par rapport à la révision spécifiée
git stash pop #applique les modifications sauvegardées

Si un fichier est concerné à la fois par les modifications en cours et le retour à la version antérieure du répertoire de travail, il y aura un conflit à résoudre.

Si les commits ont été publiés, il est possible de créer un patch qui correspondra aux modifications à effectuer pour revenir en arrière, puis enregistrer les modifications avec un nouveau commit :

#commande pour créer le patch qui applique la révision demandée au répertoire de travail
git revert 3u38t0qn00p1sr1o8012r16kp2nsxcmul1w426w5
#il est également possible d'utiliser la commande en donnant un nombre d'enregistrements que l'on souhaite annuler (4 dans cet exemple)
git revert HEAD~4..HEAD
#Vous pouvez ensuite sauvegarder votre travail. Pensez à bien spécifier ce que vous avez fait dans le message d'enregistrement
git commit

Git