Suppression/annulation d'une fusion sur Sourcetree

j'ai fait pas mal de changements dans mon projet (je travaillais sur une branche distante et pas sur le master), je les ai engagés et j'ai créé une demande de pull sur BitBucket et j'ai fusionné la branche à master. J'avais oublié de pousser mes changements après la livraison. Maintenant, après avoir essayé de passer de la branche courante à ma branche distante et de revenir à la commit avant la fusion, j'ai réussi à récupérer tous mes changements et les sauvegarder ailleurs dans mon système. Ce que je veux faire maintenant est d'annuler la mauvaise fusion que je faire. Chaque fois que je clique sur la fusion et sélectionnez "Reverse commit" , j'obtiens le message d'erreur suivant:

"error: Commit <commit_id> is a merge but no -m option was given.

 fatal: revert failed"

les branches ressemblent à ceci maintenant:

enter image description here

je veux essentiellement supprimer la fusion et l'amener à un état tel qu'il ne dit plus master(4 behind) .

je suis nouveau au contrôle des sources et j'apprécierais que quelqu'un puisse m'aider avec ça.

44
demandé sur Rameez Hussain 2014-03-20 19:06:16

2 réponses

cette méthode est basée sur la suppression historique:

  1. découvrez la branche que vous faites l'erreur sur
  2. clic Droit sur la validation que vous souhaitez réinitialiser la branche
  3. , Cliquez sur "Réinitialiser actuelles de la direction générale à ce commit"
  4. sélectionnez le mode "dur" et cliquez sur " OK "
  5. Malheureusement, vous avez besoin de terminal pour faire ce peu. Tapez git push origin name_of_branch --force dans le terminal (vous pourriez avoir besoin d'entrer votre git pensions de nom d'utilisateur et le mot de passe pour qu'il accepte la commande)

si un message apparaît plus tard dans la ligne demandant si vous souhaitez annuler le rebase ou continuer. Cliquez sur "continuer". Si vous abandonnez, la fusion apparaîtra à nouveau sur votre copie locale.

c'est probablement la façon la plus facile de le faire, mais comme il est basé sur la suppression de l'histoire, si d'autres travaillent sur le projet, assurez-vous de leur faire tous savoir ce que vous faites afin que vous ne cassez pas de quelqu'un dépôt git.

71
répondu Daniel Tonon 2016-09-28 01:29:08

il est très regrettable que SourceTree ne rend pas facile pour vous de revenir merge commits (au moins dans Windows SourceTree 1.5.2.0). Toutefois, le retour de la fusion peut facilement être accompli à partir de la ligne de commande, mais que voulez-vous revenir à la fusion en ajoutant une autre commit qui est le revers de la résultats de la propagation de la fusion, ou voulez-vous simplement supprimer la propagation de la de l'histoire?

Si vous ne partagez pas votre branche master avec d'autres personnes, la chose la plus simple faire serait simplement faire une réinitialisation dure pour supprimer la propagation de la fusion de histoire. Toutefois, si d'autres personnes ont déjà une copie de la fusion de valider, puis vous créerez du travail supplémentaire pour eux pendant qu'ils essayent de re-synchroniser leurs copies de master avec la version réécrite de la vôtre.

donc vous avez besoin de comprendre quelle option vous voulez utiliser. Je vais donner les étapes pour les deux, en utilisant la commande ligne:

Supprimer Commettre de l'Histoire

git checkout master
git push origin master --force

qui écrasera le commit de fusion sur origin/master avec l'état actuel de votre branche locale master , supprimant ainsi la commit de fusion.

Revenir s'Engager avec un autre Inverse s'Engager

git checkout master
git merge origin/master
git revert -m 1 HEAD

qui synchronisera votre succursale locale master avec origin/master , et ensuite, vous pouvez ajouter une propagation inverse en disant git revert que le 1 st la mère est celle qui doit être considérée comme la "principale" parent, et il va créer l'inverse s'engager par rapport aux changements apportés de l'autre parent s'engager.

si plus tard vous décidez que vous voulez apporter les changements de l'autre parent à nouveau, alors vous aurez besoin d'ajouter un autre commit de réversion qui inverse le reversion commit que vous venez de faire (une technique connue sous le nom de "reverting the revenir.)"

voir aussi:

  1. annuler une fusion?.
  2. Comment puis-je "dé-revenir" à une commission git révérée? .
  3. git-revert(1) page de manuel .
  4. Comment faire pour revenir à une défaillance de la fusion .
34
répondu Community 2017-05-23 11:33:27