web-dev-qa-db-fra.com

Comment puis-je annuler un `git commit` localement et sur une télécommande après` git Push`

J'ai exécuté git commit suivi d'un git Push. Comment puis-je annuler cette modification sur les référentiels locaux et distants?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date:   Tue Jun 11 12:24:23 2011 -0700
219
michael
git reset --hard HEAD~1
git Push -f <remote> <branch>

(Exemple Push:git Push -f Origin bugfix/bug123)

Cela annulera la dernière validation et transmettra l'historique mis à jour à la télécommande. Vous devez transmettre le -f parce que vous remplacez l'historique en amont de la télécommande.

369
Alexander Groß

Généralement, effectuez un commit "inverse" en utilisant:

git revert 364705c

puis envoyez-le à la télécommande comme d'habitude:

git Push

Cela ne supprimera pas le commit: il créera un commit supplémentaire qui annulera ce que le premier commit a fait. Tout le reste, pas vraiment en sécurité, surtout quand les changements ont déjà été propagés.

152
Amadan

Tout d’abord, détendez-vous.

"Rien n'est sous notre contrôle. Notre contrôle est une simple illusion.", "L'erreur est humaine"

Je comprends que vous avez involontairement poussé votre code vers remote-master. Cela va bien se passer.

1. Commencez par obtenir la valeur SHA-1 du commit que vous essayez de renvoyer, par exemple. s'engager à maîtriser la branche. lance ça:

git log

vous verrez un groupe de 'f650a9e398ad9ca606b25513bd4af9fe ...' comme des chaînes avec chacun des commits. copier ce numéro de la validation que vous souhaitez renvoyer .

2. Maintenant, tapez ci-dessous la commande:

git reset --hard your_that_copied_string_but_without_quote_mark

vous devriez voir un message du type "HEAD est maintenant à". vous êtes en clair. Ce que nous venons de faire est de refléter ce changement localement.

3. Maintenant, tapez ci-dessous la commande:

git Push -f

vous devriez voir comme

"avertissement: Push.default n'est pas défini; sa valeur implicite a changé dans ..... ... Total 0 (delta 0), réutilisée 0 (delta 0) ... ... votre_nom de branche -> master (mise à jour forcée) . "

Maintenant, vous êtes tous clairs. Vérifiez le maître avec "git log" à nouveau, votre fixed_destination_commit devrait être en haut de la liste.

Vous êtes les bienvenus (à l'avance;))

MISE À JOUR:

Maintenant, les modifications que vous aviez apportées avant que tout cela ne commence, ont maintenant disparu. Si vous voulez ramener ces durs efforts, c'est possible. Merci aux commandes git reflog et git cherry-pick .

Pour cela, je suggère de suivre s'il vous plaît ce blog ou ce post .

35
kmonsoor

git reset HEAD~1 si vous ne voulez pas que vos modifications soient supprimées (modifications non mises en scène). Modifier, valider et appuyer à nouveau git Push -f [Origin] [branch]

8
softvar

Vous pouvez faire une rebase interactive:

git rebase -i <commit>

Cela fera apparaître votre éditeur par défaut. Supprimez simplement la ligne contenant la validation que vous souhaitez supprimer pour supprimer cette validation.

Bien entendu, vous aurez besoin d’un accès au référentiel distant pour appliquer cette modification également.

Voir cette question: Git: retirer les commits sélectionnés du référentiel

3
Jack Edmonds

Alternativement:

git Push Origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

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

2
MicRum

Essayez d'utiliser

git reset --hard <commit id> 

Remarque: Ici, id de commit sera l'identifiant du commit auquel vous voulez accéder, mais pas l'identifiant que vous voulez réinitialiser. c'était le seul point où je me suis aussi retrouvé coincé.

puis Push

git Push -f <remote> <branch>
2
Mohit Dhawan