Annuler une fusion Git

120

Je travaille sur un projet utilisant Git comme VCS. J'ai eu une branche xyzcoupée de la branche principale de master. Après avoir travaillé pendant un moment, j'ai validé mon code et j'ai tiré sur la ligne principale de la branche.

La traction était bien. J'ai ensuite fusionné le code avec master. Après la fusion, des problèmes se sont produits dans certains fichiers. Je n'ai pas validé le code après la fusion. Quelqu'un peut-il expliquer comment je peux interrompre cette fusion et amener ma succursale où je travaille actuellement à l'état où elle se trouvait avant la fusion?

Salman Kazmi
la source
Vous ne pouvez pas simplement restaurer le commit précédent de la branche?
Wutipong Wongsakuldej
2
Copie possible de Comment annuler une fusion git avec conflits
Scott Weldon
1
Notez que dans Git, revertest le nom d'une commande qui crée un nouveau commit annulant les modifications d'un commit précédent, donc ce n'est probablement pas le mot que vous recherchez ici. J'ai édité votre question pour clarifier.
Scott Weldon

Réponses:

299

tant que vous ne vous êtes pas engagé, vous pouvez taper

git merge --abort

comme le suggérait la ligne de commande.

Timothy Truckle
la source
4
J'ai reçu ce message en essayant ceci: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs
1
@Ahmad git ne démarre pas une fusion avec des modifications non validées (de fichiers déjà suivis) en place. git ne peut pas protéger ce qu'il ne sait pas.
Timothy Truckle
ouais tu es, je l'ai appris en perdant mon code. voici le détail de mon problème, comment je suis tombé en difficulté. stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ahmad
23

Si vous faites "git status" pendant un conflit de fusion, la première chose que git vous montre est comment annuler la fusion.

sortie de l'état de git lors d'un conflit de fusion

MLY
la source
Bien, cela m'a suggéré de git reset HEAD <file>supprimer efficacement le "merge" collapsable du contrôle de source d'extension git => alors je pourrais soit résoudre les conflits, soit simplement annuler mes modifications dans la liste des extensions GIT :)
jave.web
6

À vrai dire, il existe déjà de très nombreuses ressources expliquant comment faire cela sur le Web:

Git: comment inverser la fusion d'un commit?

Git: comment inverser la fusion d'un commit?

Annulation des fusions , du blog de Git (récupéré sur Wayback Machine sur archive.org)

Je suppose donc que je vais simplement résumer certains d'entre eux:

  1. git revert <merge commit hash>
    Cela crée un commit supplémentaire "Revert" indiquant que vous avez annulé une fusion

  2. git reset --hard <commit hash *before* the merge>
    Cette réinitialisation de l'historique avant d'effectuer la fusion. Si vous avez des commits après la fusion, vous en aurez besoin cherry-pickpar la suite.

Mais honnêtement, ce guide ici est meilleur que tout ce que je peux expliquer, avec des diagrammes! :)

denis.lobanov
la source
1
Le lien a disparu. Soupir.
SMBiggs
@ScottBiggs Je pense qu'ils l'ont déplacé vers git-scm.com/book/en/v2/… . Denis, si vous lisez ceci, pouvez-vous vérifier? Et si c'est vraiment la même chose, pouvez-vous mettre à jour le lien dans votre réponse? Je vous remercie!
Fabio dit Réintégrer Monica