3116 votes

Abandon d'une fusion dans Git

J'ai fait git pull, et a reçu un conflit de fusion. Je sais que l'autre version du fichier est bon, et que le mien est mauvais (toutes mes modifications devrait être abandonnée). Comment dois-je faire?

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

2696voto

Pat Notz Points 46841

Depuis votre pull a échoué puis juste HEAD est le dernier "valide" s'engager sur votre branche (pas HEAD^):

git reset --hard HEAD

L'autre morceau que vous voulez est de laisser leurs changements au cours du trajet de vos modifications.

Les anciennes versions de git vous a permis d'utiliser le "leur" stratégie de fusion:

git pull --strategy=theirs remote_branch

Mais cela a depuis été supprimé, comme expliqué dans ce message en Junio Hamano (Git responsable). Comme indiqué dans le lien, au lieu de cela vous permettrait de faire ceci:

git fetch origin
git reset --hard origin

2324voto

C.. Points 10739

Si votre version git est >= 1.6.1, vous pouvez utiliser git reset --merge.

Aussi, comme @Michael Johnson mentionne, si votre version git est >= 1.7.4, vous pouvez également utiliser git merge --abort.

Comme toujours, assurez-vous que vous n'avez pas de modifications non validées avant de commencer une opération de fusion.

EDIT: Depuis le git merge page de man

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

MERGE_HEAD est présent lors d'une opération de fusion est en cours.

Aussi, concernant les modifications non validées lors du démarrage d'une fusion:

Si vous avez des modifications que vous ne voulez pas commettre avant de commencer une opération de fusion, juste git stash avant la fusion et de l' git stash pop après l'achèvement de la fusion ou de l'abandonner.

631voto

ignis Points 1685
git merge --abort

(voir la notice d'utilisation de git-fusion)

115voto

David Precious Points 4429

Je pense que c'est git reset vous avez besoin.

Attention, git revert signifie quelque chose de très différent, par exemple, svn revert - dans la Subversion revenir permettra de jeter votre (non validée) des changements, en retournant le fichier de la version actuelle du référentiel, alors que git revert "permet d'annuler un commit.

git reset devrait faire l'équivalent d' svn revert, qui est, d'ignorer vos modifications non désirées.

79voto

Charles Bailey Points 244082

Dans ce cas d'utilisation particulier, vous ne voulez pas vraiment pour annuler la fusion, juste de résoudre le conflit d'une manière particulière.

Il n'y a aucun besoin particulier de réinitialisation et d'effectuer une fusion avec une autre stratégie. Ces conflits ont été correctement mis en évidence par git et l'obligation d'accepter l'autre côtés des changements est que pour ce seul fichier.

Pour un désinstallé le fichier dans un conflit git met à la disposition de la base commune, locales et à distance de versions de ce fichier dans l'index. (C'est là où ils sont lus à partir pour une utilisation dans un 3-way outil de comparaison en git mergetool.) Vous pouvez utiliser git show "pour les afficher.

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

La façon la plus simple de résoudre le conflit à l'utilisation de la télécommande la version in extenso:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

Ou, avec git >= 1.6.1:

git checkout --theirs _widget.html.erb

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X