Retour • 20/01/2025
Comment supprimer un commit avec Git ?
Écris par Melvyn Malherbe le 20/01/2025
Parfois, on fait des erreurs dans nos commits Git et on aimerait bien pouvoir les supprimer proprement. Dans cet article, je vais t'expliquer comment gérer la suppression de commits, que ce soit pour un seul commit ou pour plusieurs.
C'est quoi un commit Git ?
Un commit dans Git, c'est comme une photo de ton code à un instant T. Chaque commit contient :
- Les modifications apportées aux fichiers
- Un message décrivant ces modifications
- Un identifiant unique (hash)
- Des métadonnées (auteur, date, etc.)
Voici à quoi ressemble l'historique des commits :
$ git log --oneline
a1b2c3d Ajout de la page de contact
e4f5g6h Correction du bug #123
i7j8k9l Premier commit
Chaque commit est identifié par un hash unique (comme "a1b2c3d"). C'est cet identifiant qu'on utilise pour manipuler les commits.
Comment supprimer le dernier commit ?
Pour supprimer le dernier commit, on utilise la commande git reset
. Il existe trois types de reset :
- Soft reset - Garde les modifications dans la staging area :
git reset --soft HEAD~1
- Mixed reset (par défaut) - Garde les modifications mais les unstage :
git reset HEAD~1
# ou
git reset --mixed HEAD~1
- Hard reset - Supprime complètement les modifications :
git reset --hard HEAD~1
Attention avec --hard
! Cette commande supprime définitivement les modifications. Utilise --soft
ou --mixed
si tu veux garder les changements.
Voici un exemple concret :
# État initial
$ git log --oneline
abc1234 Mauvais commit à supprimer
def5678 Bon commit
ghi9012 Commit initial
# Suppression du dernier commit
$ git reset --mixed HEAD~1
# Nouvel état
$ git log --oneline
def5678 Bon commit
ghi9012 Commit initial
Comment supprimer plusieurs commits ?
Pour supprimer plusieurs commits, tu peux :
- Utiliser un nombre - Pour supprimer les N derniers commits :
git reset HEAD~3 # Supprime les 3 derniers commits
- Cibler un commit spécifique - Pour revenir à un commit particulier :
git reset abc1234 # Revient au commit abc1234
Exemple pratique :
# État initial
$ git log --oneline
abc123 Commit à supprimer 3
def456 Commit à supprimer 2
ghi789 Commit à supprimer 1
jkl012 Bon commit
# Suppression des 3 derniers commits
$ git reset --mixed jkl012
# Ou avec le nombre de commits
$ git reset --mixed HEAD~3
Comment annuler une suppression de commit ?
Si tu as fait une erreur, pas de panique ! Git garde une trace de toutes les actions dans le "reflog" :
# Voir l'historique des actions
$ git reflog
abc1234 HEAD@{0}: reset: moving to HEAD~1
def5678 HEAD@{1}: commit: Mon commit supprimé
ghi9012 HEAD@{2}: commit: Commit précédent
Pour récupérer un commit supprimé :
- Trouver le commit dans le reflog :
git reflog
- Restaurer à cet état :
git reset --hard HEAD@{1} # Le numéro dépend du reflog
# ou
git reset --hard def5678 # Avec le hash du commit
Le reflog garde l'historique pendant environ 30 jours par défaut. Au-delà, les commits supprimés sont définitivement perdus.
Bonnes pratiques
Voici quelques conseils pour gérer proprement tes commits :
- Fais toujours une sauvegarde avant de manipuler l'historique
- Préfère
--soft
ou--mixed
à--hard
quand c'est possible - Vérifie deux fois le hash ou le nombre de commits avant un reset
- N'utilise pas ces commandes sur des branches partagées avec d'autres développeurs
Si tu travailles sur une branche partagée, utilise plutôt git revert
qui crée un nouveau commit d'annulation au lieu de modifier l'historique.
Tu peux maintenant gérer proprement la suppression de commits dans Git ! Si tu veux approfondir tes connaissances Git, je te conseille de lire :