codelynx.dev
🇫🇷🇬🇧

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 :

BASH
$ 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 :

  1. Soft reset - Garde les modifications dans la staging area :
BASH
git reset --soft HEAD~1
  1. Mixed reset (par défaut) - Garde les modifications mais les unstage :
BASH
git reset HEAD~1
# ou
git reset --mixed HEAD~1
  1. Hard reset - Supprime complètement les modifications :
BASH
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 :

BASH
# É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 :

  1. Utiliser un nombre - Pour supprimer les N derniers commits :
BASH
git reset HEAD~3  # Supprime les 3 derniers commits
  1. Cibler un commit spécifique - Pour revenir à un commit particulier :
BASH
git reset abc1234  # Revient au commit abc1234

Exemple pratique :

BASH
# É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" :

BASH
# 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é :

  1. Trouver le commit dans le reflog :
BASH
git reflog
  1. Restaurer à cet état :
BASH
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 :

  1. Fais toujours une sauvegarde avant de manipuler l'historique
  2. Préfère --soft ou --mixed à --hard quand c'est possible
  3. Vérifie deux fois le hash ou le nombre de commits avant un reset
  4. 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 :

BeginWeb

Cours HTML / CSS / JS gratuit

Maîtrise le web rapidement avec cette formation.