Accueil / Blog / Métier / Archives / Git : annuler proprement un commit après un push

Git : annuler proprement un commit après un push

Par Mathieu Leplatre publié 03/11/2011, édité le 29/03/2017
Git : annuler proprement un commit après un push

Ce qu'il faut éviter

Pour annuler des commits, il existe la commande git reset.

git reset --hard HEAD~1
HEAD is now at 444b1cf Rhoo

Celle-ci est pertinente tant que les commits n'ont pas été poussés. Git vous retiendra au push d'ailleurs :

git push
To /tmp/repo
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '/tmp/repo'

En effet, à partir du moment où un commit existe sur le serveur, il est potentiellement utilisé par des collaborateurs (mergé, à la base d'une branche, etc.). On pourrait faire le sale et forcer le push :

git push -f
Total 0 (delta 0), reused 0 (delta 0)
To /tmp/repo
 + b67c343...444b1cf master -> master (forced update)

Mais il y a beaucoup mieux !

Ce qu'il faut faire

Annuler un commit, c'est finalement appliquer l'inverse de son diff !

On peut rediriger le diff des commits à annuler vers la commande patch --reverse :)

git diff HEAD^ | patch --reverse

Pour faire plus simple, il y a git revert !

Par exemple pour annuler les trois derniers commits :

git revert HEAD~3..HEAD

Ou pour annuler un commit en particulier :

git revert 444b1cff

Il suffit alors de pousser proprement le commit obtenu sur le serveur. Les éventuels collaborateurs qui avaient basé leur travail sur les commits annulés devront gérer les conflits au moment venu...

Pour aller plus loin

Venez assister à notre formation Git !

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Formation GIT le 28 novembre à Toulouse et Nantes Formation GIT le 28 novembre à Toulouse et Nantes 26/09/2016

Un peu de théorie et beaucoup de pratique pour comprendre le modèle et l’architecture de GIT.

Les nouveautés de Git 2.9 Les nouveautés de Git 2.9 16/06/2016

Il y a trois jours paraissait la version 2.9.0 de Git. Survol rapide des nouveautés.

Nettoyer un dépôt Git Nettoyer un dépôt Git 17/03/2016

"Et je ne ferai pas ça tous les jours !"

Git : réconcilier HEAD détaché sur un commit avec une branche Git : réconcilier HEAD détaché sur un commit avec une branche 29/01/2016

Petite astuce #git bien utile, si vous avez perdu le fil.

Avec Git rebase, vos arbres poussent droit Avec Git rebase, vos arbres poussent droit 16/09/2011