Comment annuler les derniers commits locaux dans git
Comment annuler les derniers commits locaux dans Git
Lorsque vous travaillez avec Git, il peut arriver que vous fassiez un commit trop rapidement, par erreur, ou que vous souhaitiez simplement revenir en arrière. Heureusement, Git propose plusieurs moyens d’annuler un commit, tout en offrant différentes options selon que vous souhaitez conserver ou supprimer vos modifications.
Dans cet article, nous allons explorer plusieurs méthodes pour annuler un commit localement en utilisant les commandes suivantes :
git reset
git revert
git reset --soft
git reset --hard
Nous expliquerons également les notions de HEAD
, HEAD^
, HEAD~1
, et leurs implications.
1. Préparer un environnement de test
Si vous n’avez pas encore de projet Git sous la main, vous pouvez cloner un dépôt existant. Prenons par exemple le dépôt Spring PetClinic disponible sur GitHub :
$ git clone https://github.com/spring-projects/spring-petclinic.git
Une fois le dépôt cloné, placez-vous dans le dossier du projet :
$ cd spring-petclinic
Affichons l’historique des commits avec :
$ git log --oneline
Vous devriez voir une liste des derniers commits.
2. Faire un commit de test
Modifions un fichier pour tester les différentes méthodes d’annulation.
- Ouvrez le fichier
README.md
et ajoutez une ligne de texte. -
Vérifiez l’état du dépôt :
$ git status
-
Ajoutez les modifications au staging :
$ git add .
-
Effectuez un commit :
$ git commit -m "Ajout d'un commentaire dans README"
-
Vérifiez que le commit a bien été pris en compte :
$ git log -1
3. Annuler un commit avec git reset
a) Annuler un commit et conserver les modifications (--soft
)
Si vous souhaitez annuler le commit tout en conservant les modifications dans l’index (staging area), utilisez :
$ git reset --soft HEAD~1
Explication :
HEAD~1
ouHEAD^
fait référence au commit précédent.- L’option
--soft
conserve les fichiers modifiés dans le staging. - Le commit est annulé, mais vos fichiers restent prêts à être commités.
Vérifiez avec :
$ git status
Vos fichiers sont toujours marqués comme “prêts pour le commit”.
b) Annuler un commit et remettre les fichiers dans l’espace de travail (--mixed
)
Si vous voulez annuler le commit et déplacer les fichiers modifiés hors du staging area :
$ git reset --mixed HEAD~1
- Cette commande retire les fichiers du commit et les place en modifications non indexées.
- Utilisez
git status
pour voir que les fichiers sont maintenant en “Unstaged Changes”.
c) Annuler un commit et supprimer complètement les modifications (--hard
)
Si vous souhaitez annuler le commit et supprimer toutes les modifications associées :
$ git reset --hard HEAD~1
- Cette option supprime les modifications des fichiers.
- Attention : les changements seront définitivement perdus.
- Vérifiez avec
git log
etgit status
que le commit a disparu.
4. Annuler un commit sans modifier l’historique (git revert
)
Plutôt que d’effacer un commit avec reset
, il est souvent préférable d’utiliser git revert
, surtout si vous travaillez en équipe.
$ git revert HEAD
- Cette commande crée un nouveau commit qui annule le commit précédent.
- C’est une méthode propre et recommandée en environnement collaboratif.
Après exécution, Git ouvre un éditeur de texte pour modifier le message du commit de revert. Validez avec :wq
(Vim) ou CTRL+X
(Nano).
Vérifiez avec :
$ git log --oneline
Vous verrez un nouveau commit indiquant que le précédent a été annulé.
5. Comprendre HEAD
, HEAD^
, HEAD~1
HEAD
représente le commit actuel (le dernier commit effectué).HEAD^
ouHEAD~1
désigne le commit précédent.HEAD~2
représente le commit avant le précédent, et ainsi de suite.
Par exemple :
$ git reset --hard HEAD~2
Reviendra deux commits en arrière en supprimant les modifications des commits annulés.
6. Quelle méthode choisir ?
Situation | Commande recommandée |
---|---|
Annuler le dernier commit en gardant les modifications | git reset --soft HEAD~1 |
Annuler le dernier commit et retirer les fichiers du staging | git reset --mixed HEAD~1 |
Annuler le dernier commit et supprimer toutes les modifications | git reset --hard HEAD~1 |
Annuler un commit proprement en conservant l’historique | git revert HEAD |
Conclusion
Git offre plusieurs manières d’annuler un commit en fonction de vos besoins. La commande git reset
permet de revenir en arrière avec différents niveaux de conservation des modifications, tandis que git revert
est recommandé pour une collaboration en équipe.
En maîtrisant ces techniques, vous pourrez mieux gérer votre historique Git et corriger rapidement des erreurs sans impacter négativement votre workflow.
💡 Astuce : Avant d’utiliser git reset --hard
, assurez-vous de ne pas perdre des modifications importantes en les sauvegardant dans une autre branche avec git branch sauvegarde-temporaire
.
📢 N’hésitez pas à partager cet article et à poser vos questions en commentaire !