Comment supprimer un commit d'une branche ?

Comment supprimer un commit d’une branche ?

Lors du développement logiciel, il arrive fréquemment de faire un commit par erreur sur la mauvaise branche, ou simplement de vouloir supprimer un commit qui ne devrait pas être là. Contrairement à ce qu’on pourrait croire, supprimer un commit d’une branche n’est pas une opération destructive si on connaît les bonnes techniques.

Dans cet article, nous allons explorer plusieurs façons de supprimer un commit d’une branche Git, en fonction de votre situation spécifique.


1. Cas 1 : Supprimer le dernier commit (HEAD)

Situation

Vous avez commité par erreur les dernières modifications et vous voulez vous en débarrasser.

Solution avec git reset --hard

La manière la plus simple est d’utiliser git reset --hard :

$ git reset --hard HEAD~1

Cette commande :

Vérification :

$ git log --oneline

Vous verrez que le dernier commit a disparu.

⚠️ Attention

Cette commande est destructrice. Les modifications du commit supprimé seront perdues. Si vous avez besoin de les récupérer plus tard, sauvegardez d’abord :

$ git branch sauvegarde-temporaire HEAD

2. Cas 2 : Supprimer un commit ancien (pas le dernier)

Situation

Vous avez un commit au milieu de votre historique que vous souhaitez retirer proprement.

Solution avec git rebase -i

Le rebasing interactif est la meilleure approche :

$ git rebase -i HEAD~5

Cette commande ouvre votre éditeur de texte avec les 5 derniers commits. Vous verrez quelque chose comme :

pick abc1234 Commit 1
pick def5678 Commit 2
pick ghi9012 Commit à supprimer
pick jkl3456 Commit 4
pick mno7890 Commit 5

Pour supprimer le commit ghi9012, remplacez pick par drop :

pick abc1234 Commit 1
pick def5678 Commit 2
drop ghi9012 Commit à supprimer
pick jkl3456 Commit 4
pick mno7890 Commit 5

Sauvegardez et quittez l’éditeur (:wq pour Vim). Git réappliquer les commits restants automatiquement.

Vérification :

$ git log --oneline

Le commit a disparu et l’historique est linéaire.


3. Cas 3 : Supprimer un commit mais garder les modifications

Situation

Vous ne voulez pas perdre le code du commit, mais vous voulez retirer le commit de l’historique.

Solution avec git reset --soft

$ git reset --soft HEAD~1

Ensuite, les modifications reviennent à l’état “staged” (prêtes à être commités). Vous pouvez alors :


4. Cas 4 : Supprimer plusieurs commits consécutifs

Situation

Vous avez fait 3 commits par erreur et vous voulez tous les supprimer.

Solution

$ git reset --hard HEAD~3

Cela supprime les 3 derniers commits. Ou utilisez le rebase interactif :

$ git rebase -i HEAD~3

Et marquez les commits à supprimer avec drop.


5. Cas 5 : Vous avez déjà poussé le commit sur la branche distante

Situation

Le commit a déjà été envoyé vers le serveur (GitHub, GitLab, etc.). Vous ne pouvez pas simplement utiliser git reset.

⚠️ Avant toute chose

Communiquez avec votre équipe ! Les autres développeurs qui travaillent sur cette branche auront des problèmes.

Solution 1 : Force push (non recommandé en équipe)

$ git reset --hard HEAD~1
$ git push origin --force

Risque : Vous écrasez l’historique distant et pouvez causer des problèmes aux autres développeurs.

Solution 2 : Utiliser git revert (recommandé)

Pour les commits poussés, préférez git revert qui crée un nouveau commit d’annulation :

$ git revert HEAD
$ git push origin

Cela crée un commit qui annule l’effet du commit précédent, sans modifier l’historique.


6. Cas 6 : Vous avez supprimé un commit par erreur et vous le regrettez

Situation

Vous avez utilisé git reset --hard et réalisez que vous aviez besoin de ce commit.

Solution avec git reflog

Git enregistre toutes les opérations. Vous pouvez les voir avec :

$ git reflog

Vous verrez quelque chose comme :

abc1234 HEAD@{0}: reset: moving to HEAD~1
def5678 HEAD@{1}: commit: Mon commit supprimé
ghi9012 HEAD@{2}: checkout: switching to feature-branch

Récupérez le commit supprimé :

$ git reset --hard def5678

Votre commit est revenu !


7. Tableau récapitulatif

Situation Commande Risque Note
Supprimer le dernier commit (pas pushé) git reset --hard HEAD~1 Élevé (destructeur) Rapide et simple
Supprimer un commit ancien git rebase -i HEAD~N Moyen Plus contrôlé
Garder les modifications git reset --soft HEAD~1 Faible Les modifications restent
Commit déjà pushé git revert HEAD Très faible Recommandé en équipe
Récupérer un commit supprimé git reflog Très faible Salvateur d’urgence

8. Bonnes pratiques

À faire :

À éviter :


Conclusion

Supprimer un commit d’une branche est une opération courante en Git. Les méthodes varient selon le contexte :

En maîtrisant ces techniques, vous aurez un contrôle total sur votre historique Git et pourrez corriger vos erreurs rapidement et proprement.

💡 Astuce finale : Créez toujours une branche de sauvegarde avant d’effectuer des opérations destructrices :

$ git branch sauvegarde
$ git reset --hard HEAD~1

Ainsi, si quelque chose se passe mal, vous pouvez toujours revenir à votre sauvegarde.


Rejoignez-nous