Comment puis-je annuler un "git commit" localement et à distance après "git push"

j'ai exécuté git commit suivi d'un git push . Comment puis-je revenir sur les deux dépôts locales et à distance?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date:   Tue Jun 11 12:24:23 2011 -0700
199
demandé sur jubobs 2011-06-23 22:44:31

7 réponses

git reset --hard HEAD~1
git push -f <remote> <branch>

(exemple push: git push -f origin bugfix/bug123 )

cela annulera le dernier commit et poussera l'histoire mise à jour vers la télécommande. Vous devez passer le -f parce que vous remplacez l'historique en amont dans la télécommande.

331
répondu Alexander Groß 2016-01-13 08:59:58

généralement, faire une "inverse" commit, en utilisant:

git revert 364705c

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

git push

cela ne supprimera pas la commit: cela fait une commit supplémentaire qui annule tout ce que la première commit a fait. N'importe quoi d'autre, pas vraiment sûr, surtout quand les changements ont déjà été propagés.

143
répondu Amadan 2011-06-23 18:50:55

tout d'abord, détendez-vous.

" rien n'est sous notre contrôle. Notre contrôle n'est qu'illusion.", "l'erreur est humaine"

je comprends que vous ayez involontairement poussé votre code à remote-master . CELA va être bien.

1. dans un premier temps, récupérez la valeur SHA-1 de la propagation que vous essayez de retourner, par exemple commit to master branch. exécuter ce:

git log

vous verrez un tas de f650a9e398ad9ca606b25513bd4af9fe...'comme des cordes avec chacune des commit. copiez ce nombre de la propagation que vous voulez retourner .

2. tapez maintenant la commande suivante:

git reset --hard your_that_copied_string_but_without_quote_mark

vous devriez voir un message comme "la TÊTE est maintenant ". vous êtes sur clair. Ce qu'il vient de faire est de refléter que modifier localement.

3. tapez maintenant la commande suivante:

git push -f

vous devriez voir comme

" avertissement: pousser.par défaut n'est pas défini, sa valeur implicite a changé dans..... ... Total 0 (delta 0), réutilisé 0 (delta 0)... ...your_branch_name - > master (mise à jour forcée)."

maintenant, tout est clair. Vérifiez le maître avec" git log " à nouveau, votre fixed_destination_commit devrait être en haut de la liste.

Vous êtes les bienvenus (en avance; -))

mise à jour:

maintenant, les changements que vous aviez faits avant que tout cela ne commence, sont maintenant partis. Si tu veux ramener ces durs travaux, c'est possible. Merci aux commandes git refrog , et git cherry-pick .

pour cela, je suggère à veuillez suivre ce blog ou ce post .

29
répondu kmonsoor 2016-12-14 10:35:51

git reset HEAD~1 si vous ne voulez pas que vos changements aient disparu(changements non inscrits). Le changement, s'engager et d'appuyer de nouveau sur git push -f [origin] [branch]

6
répondu softvar 2014-06-25 13:42:43

vous pouvez faire un rebase interactif:

git rebase -i <commit>

cela va faire apparaître votre éditeur par défaut. Il suffit de supprimer la ligne contenant la propagation que vous voulez supprimer pour supprimer cette propagation.

vous aurez bien sûr besoin d'accéder au dépôt distant pour y appliquer ce changement.

voir la question: Git: suppression des propagations sélectionnées du dépôt

3
répondu Jack Edmonds 2017-05-23 12:18:27

alternativement:

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

forcer la branche principale du dépôt à distance d'origine au parent de la dernière propagation

2
répondu MicRum 2014-10-22 22:41:26

essayer d'utiliser

git reset --hard <commit id> 

s'il vous Plaît Note : Ici commettre id l'id de la validation que vous voulez aller, mais pas l'id que vous souhaitez réinitialiser. c'était le seul point où je suis aussi coincé.

puis push

git push -f <remote> <branch>
2
répondu Mohit Dhawan 2016-02-01 10:07:15