Question J'ai couru dans un conflit de fusion. Comment puis-je annuler la fusion?
j'ai utilisé git pull
et a eu un conflit de fusion:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
Je sais que l'autre version du fichier est bonne et que la mienne est mauvaise donc tous mes changements devraient être abandonnés. Comment puis-je faire ceci?
1911
2017-09-19 13:21
origine
Réponses:
Depuis votre pull
a échoué alors HEAD
(ne pas HEAD^
) est le dernier commit "valide" sur votre branche:
git reset --hard HEAD
L'autre pièce que vous voulez est de laisser leurs changements prendre le pas sur vos changements.
Les anciennes versions de git vous ont permis d'utiliser la stratégie de fusion "theirs":
git pull --strategy=theirs remote_branch
Mais cela a depuis été retiré, comme expliqué dans ce message de Junio Hamano (le mainteneur Git). Comme indiqué dans le lien, au lieu de cela, vous feriez ceci:
git fetch origin
git reset --hard origin
1727
2017-09-19 14:33
Si votre version git est> = 1.6.1, vous pouvez utiliser git reset --merge
.
Aussi, comme le mentionne Michael Johnson, 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 fusion.
Du git fusionner la page man
git merge --abort
est équivalent à git reset --merge
quand MERGE_HEAD
est présent.
MERGE_HEAD
est présent lorsqu'une fusion est en cours.
En outre, concernant les modifications non validées lors du démarrage d'une fusion:
Si vous avez des modifications que vous ne voulez pas valider avant de commencer une fusion, git stash
eux avant la fusion et git stash pop
après avoir fini la fusion ou l'avoir abandonnée.
1584
2018-03-28 23:16
git merge --abort
Abandonner le processus actuel de résolution des conflits et essayer de reconstruire
l'état de pré-fusion.
S'il y avait des modifications non validées de worktree lors de la fusion
commencé, git merge --abort
sera dans certains cas incapable de
reconstruire ces changements. Il est donc recommandé de toujours
valider ou stocker vos modifications avant d'exécuter git merge.
git merge --abort
est équivalent à git reset --merge
quand
MERGE_HEAD
est présent.
http://www.git-scm.com/docs/git-merge
378
2017-11-12 21:40
Dans ce cas d'utilisation particulier, vous ne voulez pas vraiment annuler la fusion, résolvez simplement le conflit d'une manière particulière.
Il n'y a pas non plus besoin de réinitialiser et d'effectuer une fusion avec une stratégie différente. Les conflits ont été correctement mis en évidence par git et l'exigence d'accepter les changements des autres côtés est seulement pour ce fichier.
Pour un fichier non fusionné dans un conflit, git met à disposition la base commune, les versions locales et distantes du fichier dans l'index. (C'est ici qu'ils sont lus pour une utilisation dans un outil de comparaison à trois git mergetool
.) Vous pouvez utiliser git show
pour les voir.
# common base:
git show :1:_widget.html.erb
# 'ours'
git show :2:_widget.html.erb
# 'theirs'
git show :3:_widget.html.erb
Le moyen le plus simple de résoudre le conflit pour utiliser la version distante verbatim est:
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
73
2017-09-20 10:41
je pense que c'est git reset
vous avez besoin.
Méfiez-vous que git revert
signifie quelque chose de très différent de, disons, svn revert
- dans Subversion, la restauration annulera vos modifications (non validées), renvoyant le fichier à la version actuelle du référentiel, tandis que git revert
"annule" un commit.
git reset
devrait faire l'équivalent de svn revert
, c'est-à-dire, défaussez vos changements non désirés.
72
2017-09-19 13:25
Puisque les commentaires suggèrent que git reset --merge
est un alias pour git merge --abort
, il vaut la peine de noter que git merge --abort
est seulement équivalent à git reset --merge
étant donné qu'un MERGE_HEAD
est présent. 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 échouée, quand il n'y a pas MERGE_HEAD
, la fusion échouée peut être annulée avec git reset --merge
mais pas nécessairement avec git merge --abort
, donc ils ne sont pas seulement ancienne et nouvelle syntaxe pour la même chose.
Personnellement je trouve git reset --merge
beaucoup plus puissant pour les scénarios similaires à celui décrit, et les fusions échouées en général.
29
2018-04-02 12:16
Depuis Git 1.6.1.3 git checkout
a été en mesure de vérifier de chaque côté d'une fusion:
git checkout --theirs _widget.html.erb
16
2017-07-17 01:29