Comment annuler une fusion Git avec des conflits

785

Je suis en succursale mybranch1. mybranch2est bifurqué mybranch1et des modifications ont été apportées mybranch2.

Ensuite, pendant que mybranch1je l'ai fait, git merge --no-commit mybranch2 cela montre qu'il y a eu des conflits lors de la fusion.

Maintenant, je veux tout jeter (la mergecommande) pour que ça mybranch1revienne à ce qu'elle était avant. Je n'ai aucune idée de comment je dois procéder.

Anshul
la source

Réponses:

1355

Dernier Git:

git merge --abort

Cela tente de réinitialiser votre copie de travail dans l'état dans lequel elle se trouvait avant la fusion. Cela signifie qu'il doit restaurer toutes les modifications non validées d'avant la fusion, bien qu'il ne puisse pas toujours le faire de manière fiable. En règle générale, vous ne devez de toute façon pas fusionner avec des modifications non validées.

Avant la version 1.7.4:

git reset --merge

Cette syntaxe est plus ancienne mais fait la même chose que ci-dessus.

Avant la version 1.6.2:

git reset --hard

qui supprime toutes les modifications non validées, y compris la fusion non validée. Parfois, ce comportement est utile même dans les versions plus récentes de Git qui prennent en charge les commandes ci-dessus.

Daniel Cassidy
la source
1
Mais pour les anciennes versions de git, c'est la façon d'utiliser
Anshul
7
Parfois, vous devez toujours utiliser git reset --mergemême dans les versions plus récentes. J'ai eu une git merge --aborterreur (ne faisant aucun changement) où git reset --mergeréussit (et fait la bonne chose) dans git 2.2.1.
Theodore Murdock
J'ai trouvé que je devais faire, git merge --abortsuivi de la git reset --mergesortie automatique du conflit de l'éclatement de ma cachette.
Chef Pharaon le
1
git merge --abortfonctionne généralement pour moi, mais je me suis retrouvé dans une situation où j'ai vérifié dans un état HEAD détaché, et l'un de mes fichiers avait un état "les deux modifiés". Je voulais tout jeter et revenir à une succursale, je le devais git reset --hard, git merge --abortm'a dit qu'il n'y avait pas de fusion à abandonner, (MERGE_HEAD manquant).
yano
Parfois, il git merge --abortn'est pas en mesure de vous ramener à votre état précédent, et dans ce cas, la "syntaxe plus ancienne" git reset --hardfait l'affaire.
Kevin Stewart
130

En fait, il est en aperçoive une valeur qui git merge --abortest équivalente à seulement git reset --mergeétant donné que MERGE_HEADest présente. Cela peut être lu dans la commande git help for merge.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

Après une fusion qui a échoué, quand il n'y en a pas MERGE_HEAD, la fusion qui a échoué peut être annulée git reset --mergemais pas nécessairement avec git merge --abort, donc ils ne sont pas seulement une ancienne et une nouvelle syntaxe pour la même chose .

Personnellement, je trouve git reset --mergebeaucoup plus utile dans le travail quotidien.

Martin G
la source
2
Merci, cette info a été très utile. J'ai eu une fusion qui a commencé avec git stash applyune mauvaise branche et je git merge --abortn'ai rien fait (non MERGE_HEAD), tout en faisant git reset --mergel'affaire.
géomaster
4
J'ai vu environ 10 personnes dire que git merge --abortc'est la nouvelle commande pour git reset --mergeet j'ai rencontré le même problème que @geomaster c'était super utile merci!
Tom
106

En supposant que vous utilisez le dernier git,

git merge --abort
Adam Dymitruk
la source
Ok, cela ne fonctionne pas avec 1.7.0.7 :(. Je dois utiliser reset --hard with it
Anshul
5

Il y a deux choses que vous pouvez faire d'abord annuler la fusion par commande

git merge --abort

ou

vous pouvez revenir temporairement à votre état de validation précédent par commande

git checkout 0d1d7fc32 
Manish Kumar Singh
la source
0

Sourcetree

Si vous ne validez pas votre fusion, double-cliquez simplement sur une autre branche (= checkout) et lorsque sourcetree vous demandera de supprimer toutes les modifications, puis acceptez

Kamil Kiełczewski
la source