229 votes

Comment annuler un `git commit` localement et sur un distant après un `git push` ?

J'ai effectué git commit suivi d'un git push . Comment puis-je annuler cette modification sur les dépôts locaux et distants ?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date:   Tue Jun 11 12:24:23 2011 -0700

380voto

Alexander Groß Points 4217
git reset --hard HEAD~1
git push -f <remote> <branch>

(Exemple de poussée : git push -f origin bugfix/bug123 )

Ceci annulera le dernier commit et poussera l'historique mis à jour vers le serveur distant. Vous devez passer le paramètre -f parce que vous remplacez l'historique en amont dans la télécommande.

Edita:

Veuillez noter que --hard rendra votre livraison inaccessible (c'est-à-dire qu'elle semblera avoir été supprimée, mais vous pourrez toujours git show <hash> o git log <hash> si vous vous souvenez de son hash). Si vous souhaitez conserver vos modifications, exécutez :

git reset [--mixed] HEAD~1

À ce stade, les modifications ne sont pas mises à jour, car vous avez utilisé la fonction --mixed qui est la valeur par défaut.

Il se peut que vous souhaitiez d'abord mettre à jour l'arbre distant (c'est-à-dire supprimer le commit) : git push -f <remote> <branch>

Puisque vous avez toujours vos modifications localement, vous pouvez créer une autre branche et commit les (et push à votre convenance).

155voto

Amadan Points 41944

En règle générale, il convient de procéder à un engagement "inverse", en utilisant la méthode suivante

git revert 364705c

puis l'envoyer à la télécommande comme d'habitude :

git push

Cela ne supprime pas le commit : cela crée un commit supplémentaire qui annule ce que le premier commit a fait. Toute autre méthode n'est pas vraiment sûre, en particulier lorsque les modifications ont déjà été propagées.

8voto

softvar Points 2982

git reset HEAD~1 si vous ne voulez pas que vos modifications disparaissent (modifications non gérées). Modifier, livrer et pousser à nouveau git push -f [origin] [branch]

3voto

Jack Edmonds Points 10264

Vous pouvez procéder à un rebasement interactif :

git rebase -i <commit>

L'éditeur par défaut s'affiche. Supprimez simplement la ligne contenant le commit que vous souhaitez supprimer pour supprimer ce commit.

Vous devrez, bien entendu, avoir accès au référentiel distant pour y appliquer cette modification également.

Voir cette question : Git : suppression des commits sélectionnés dans le dépôt

2voto

MicRum Points 426

Alternativement :

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

Forcer la branche principale du référentiel distant d'origine vers le parent du dernier commit

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X