Comment supprimer un commit avec Git ?
20/01/2025 • Melvynx
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.
Un commit dans Git, c'est comme une photo de ton code à un instant T. Chaque commit contient :
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.
Pour supprimer le dernier commit, on utilise la commande git reset
. Il existe trois types de reset :
git reset --soft HEAD~1
git reset HEAD~1
# ou
git reset --mixed HEAD~1
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
Pour supprimer plusieurs commits, tu peux :
git reset HEAD~3 # Supprime les 3 derniers commits
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
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é :
git reflog
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.
Voici quelques conseils pour gérer proprement tes commits :
--soft
ou --mixed
à --hard
quand c'est possibleSi 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 :