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
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.
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.
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 .
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]
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
alternativement:
git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master
forcer la branche principale du dépôt à distance d'origine au parent de la dernière propagation
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>