Supprimer / annuler une fusion sur Sourcetree

J’ai apporté peu de modifications à mon projet (je travaillais sur une twig distante et non sur le maître), je les ai validées et j’ai créé une requête pull sur BitBucket et fusionné la twig à maîsortingser. J’avais oublié de repousser mes modifications après le commit. Maintenant, après avoir essayé de basculer la twig actuelle vers ma twig distante et de revenir à la validation avant la fusion, j’ai réussi à récupérer toutes mes modifications et à les sauvegarder ailleurs dans mon système. Ce que je veux faire maintenant, c’est défaire la mauvaise fusion que j’ai faite. Chaque fois que je clique sur la fusion et que je sélectionne "Reverse commit" , je reçois le message d’erreur suivant:

 "error: Commit  is a merge but no -m option was given. fatal: revert failed" 

Les twigs ressemblent à ceci maintenant:

entrer la description de l'image ici

Je veux essentiellement supprimer la fusion et l’amener à un état tel qu’elle ne dit plus master(4 behind) .

Je suis nouveau dans le contrôle des sources et j’apprécierais que quelqu’un puisse m’aider avec ceci.

Cette méthode est basée sur la suppression de l’historique:

  1. Découvrez la twig sur laquelle vous avez commis l’erreur
  2. Faites un clic droit sur la validation que vous souhaitez réinitialiser à la twig
  3. Cliquez sur “Réinitialiser la twig actuelle à cette validation”
  4. Sélectionnez le mode “Hard” et cliquez sur “OK”
  5. Malheureusement, vous avez besoin d’un terminal pour le faire. Tapez git push origin name_of_branch --force dans le terminal (vous devrez peut-être entrer votre nom d’utilisateur et votre mot de passe git repo pour qu’il accepte la commande)

Si un message apparaît plus tard dans la ligne pour vous demander si vous souhaitez abandonner le rebase ou continuer. Cliquez sur “continuer”. Si vous abandonnez, la fusion apparaîtra à nouveau sur votre copie locale.

C’est probablement le moyen le plus simple de le faire, mais comme il est basé sur la suppression de l’historique, si d’autres travaillent sur le projet, assurez-vous de leur faire savoir ce que vous faites pour ne pas casser le repository git.

Il est très regrettable que SourceTree ne facilite pas la restauration des validations de fusion (du moins dans Windows SourceTree 1.5.2.0). Toutefois, vous pouvez facilement rétablir la fusion à partir de la ligne de commande, mais souhaitez-vous annuler la fusion en ajoutant un autre commit qui est l’inverse des résultats de la validation de fusion ou souhaitez-vous simplement supprimer le commit de fusion de l’historique? tout à fait?

Si vous ne partagez pas votre twig principale avec d’autres personnes, la chose la plus simple à faire serait de simplement effectuer une réinitialisation matérielle pour supprimer le commit de fusion de l’historique. Cependant, si d’autres personnes ont déjà une copie de cette validation de fusion, vous créerez un travail supplémentaire en essayant de resynchroniser leurs copies de master avec la version réécrite.

Vous devez donc déterminer quelle option vous souhaitez utiliser. Je vais donner les étapes pour les deux, en utilisant la ligne de commande:

Supprimer Commit from History

 git checkout master git push origin master --force 

Cela écrasera la validation de fusion sur origin/master avec l’état actuel de votre twig master locale, supprimant ainsi la validation de fusion.

Rétablir la validation avec un autre engagement inversé

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

Cela amènera votre twig master locale en synchronisation avec l’ origin/master , puis vous pourrez append une validation en indiquant à git revert que le 1 er parent est celui qui doit être considéré comme le parent principal, et cela créera le validation inversée relative aux modifications apscopes par l’autre validation par le parent.

Si vous décidez ultérieurement d’intégrer à nouveau les modifications de l’autre parent, vous devrez alors append une autre validation de réversion qui annule la validation de retour que vous venez d’effectuer (technique appelée “annulation du retour”).

Voir également:

  1. Annuler une fusion Git?.
  2. Comment puis-je annuler la conversion d’un engagement Git annulé? .
  3. git-revert (1) Page Manuelle .
  4. Comment annuler une fusion défectueuse .