Comment terminer la fusion après avoir résolu mes conflits de fusion?

j'ai lu la section branchement de base et fusion du Git Community Book.

donc je le suis et je crée une branche: experimental .

Puis I:

  1. passer à la branche expérimentale (git checkout expérimental)
  2. faire un tas de changements
  3. la commettre (git commit-a)
  4. passer à la branche principale (git checkout master)
  5. de faire quelques changements et de s'engager là
  6. revenir à expérimentales (git checkout expérimental)
  7. fusion maîtriser le changement expérimental (git merge master)
  8. il y a quelques conflits mais après que je les ai résolus, j'ai fait 'git ajouter mon fichier'

  9. et maintenant je suis coincé, Je ne peux pas revenir au maître

quand je fais

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

et j'ai fait:

$ git rebase --abort

pas de rebase en cours?

et j'ai fait:

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

Que puis-je faire pour retourner dans ma branche principale?

197
demandé sur Vadim Kotov 2010-03-19 02:43:08

9 réponses

Lorsqu'il y a un conflit lors d'une fusion, vous devez terminer la propagation manuellement. Il semble que vous avez fait les deux premières étapes, à modifier les fichiers en conflit, puis exécutez git add marquer comme résolu. Enfin, vous devez valider la fusion avec git commit . À ce moment-là, vous serez en mesure de changer de branches à nouveau.

198
répondu Jimmy Cuadra 2010-03-18 23:52:38

comment terminer la fusion après avoir résolu mes conflits de fusion?

avec Git 2.12 (Q1 2017), vous aurez la commande plus naturelle:

git merge --continue

Voir commettre c7d227d (15 Dec 2016) par Jeff King ( peff ) .

Voir commettre 042e290 , commettre c261a87 , commit 367ff69 (14 Dec 2016) by Chris Packham ( cpackham ) .

(fusionné par Junio CA Hamano -- gitster -- in commit 05f6e1b , 27 Dec 2016)

voir 2.12 notes de mise à jour .

merge : ajouter " --continue option "comme synonyme de" git commit '

Enseigner " git merge ' --continue option qui permet 'continue' a fusionnez en le complétant.

La méthode traditionnelle pour réaliser une fusion après avoir résolu les conflits est d'utiliser ' git commit ".

Maintenant avec des commandes comme ' git rebase ' et ' git cherry-pick 'ayant une option ' --continue 'ajoutant une telle option à ' git merge ' présente une interface utilisateur cohérente.

66
répondu VonC 2018-05-30 17:16:58

dans le cas où vous êtes coincé pendant une fusion/rebase, vous pouvez toujours

git reset --hard

pour restaurer votre travail à l'état de la dernière validation. Cela perdra vos modifications de l'arbre de travail, donc si vous aviez des modifications locales avant la fusion, elles disparaîtront après cela-c'est pourquoi il est conseillé de ne pas lancer une fusion lorsque vous avez des modifications locales. :)

21
répondu Bombe 2010-03-20 11:33:57

juste git commit it.

optionnel git abort it:

j'ai eu un conflit de fusion. Comment puis-je annuler la fusion?

pour faciliter la vie avec on merges installez kdiff3 et configurez-le comme un mergetool. Instructions: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/

cette page contient cette vidéo: https://www.youtube.com/watch?v=Cc4xPp7Iuzo

9
répondu Shimon Doodkin 2017-11-01 16:01:51

chaque fois que vous fusionnez deux branches en utilisant la commande git merge brancha branchb , il y a deux possibilités:

  1. une branche (disons brancha) peut être atteinte par l'autre branche (disons branchb) en suivant son historique de propagation.Dans ce cas git simplement accélérer la tête pour pointer vers la branche récente (dans ce cas branchb).

    2.Mais si les deux branches ont divergé à un certain point plus ancien alors git crée un nouvel instantané et ajouter un nouveau commit qui le pointe. Ainsi, s'il n'y a pas de conflit entre les branches que vous fusionnez, git crée en douceur un nouveau commit.

Exécuter git log pour voir le commit après avoir fusionné deux non-contradictoires branches.

revient maintenant au cas intéressant où il y a des conflits de fusion entre les branches fusionnantes. Je cite ceci de la page https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

Git n'a pas créé automatiquement une nouvelle commit de fusion. Il a interrompu le processus pendant que vous résolvez le conflit. Si vous voulez voir quels fichiers ne sont pas fusionnés à n'importe quel moment après un conflit de fusion, vous pouvez lancer git status


donc en cas de conflits de fusion, vous devez résoudre le conflit puis Ajouter les changements que vous avez apportés à la zone de transit en utilisant git add filename et ensuite commit les changements en utilisant la commande git commit qui a été interrompue par git en raison du conflit.J'espère que cela explique votre question . Visitez également le lien ci-dessus pour comprendre les choses en détail . En cas de n'importe quelle requête s'il vous plaît commenter ci-dessous , je serai heureux d'aider.

8
répondu Sourav Prem 2017-06-20 05:57:31

les étapes suivantes après la résolution manuelle des conflits sont: -

  1. git add .
  2. git status (ceci vous montrera quelles commandes sont nécessaires pour poursuivre la procédure de fusion automatique)
  3. [commande suggérée par git, p.ex. git merge --continue , git cherry-pick --continue , git rebase --continue ]
5
répondu Timidfriendly 2016-02-19 14:00:46

la première chose que je veux clarifier est que les noms de branches sont juste un alias pour une propagation spécifique. un commit est ce que git fonctionne, quand vous tirez, poussez fusionner et ainsi de suite. Chaque commit possède un identifiant unique.

quand vous faites la fusion $ git, ce qui se passe en fait est que git essaie de faire avancer votre branche actuelle vers la propagation la branche référencée est sur (en d'autres termes, les deux noms de branche pointent vers la même propagation.) Ce scénario est le plus facile pour git à traiter, car il n'y a pas de nouveau commit. Pensez à maître sautant sur le lilipad sur lequel votre branche se refroidit. Il est possible de mettre le drapeau --no-ff, auquel cas git va créer une nouvelle commit, qu'il y ait ou non des conflits de code.

dans une situation où il y a des conflits de code entre les deux branches que vous essayez de fusionner (habituellement deux branches dont l'histoire de propagation partage un commit commun dans le passé), le fast forward ne fonctionnera pas. git peut encore être en mesure de fusionner automatiquement les fichiers, tant que la même ligne n'a pas été changée par les deux branches dans un fichier en conflit. dans ce cas, git fusionnera les fichiers en conflit pour vous et les propagera automatiquement. Vous pouvez prévisualiser comment git a fait en faisant $ git diff -- cache. Ou vous pouvez passer le drapeau --no-commit à la commande merge, qui laissera les fichiers modifiés dans votre index que vous aurez besoin d'ajouter et de commit. Mais vous pouvez $ git différencier ces fichiers pour examiner ce que la fusion va changer.

le le troisième scénario est quand il y a des conflits que git ne peut pas résoudre automatiquement. Dans ce cas, vous devrez les fusionner manuellement. À mon avis, c'est le plus facile à faire avec une fusion a pris, comme la fusion araxis ou p4merge (libre). Dans tous les cas, vous devez faire chaque fichier un par un. Si la fusion semble être bloquée, utilisez $ git merge --continue, pour la faire avancer. Git devrait vous dire si elle ne peut pas continuer, et si oui, pourquoi pas. Si vous sentez que vous avez gâché la fusion à un moment donné, vous pouvez faire la fusion $ git -- abandonner, et toute fusion sera annulée et vous pouvez commencer. Lorsque vous avez terminé, chaque fichier que vous avez fusionné sera un fichier modifié qui doit être ajouté et engagée. Vous pouvez vérifier où sont les fichiers avec le statut $ git. Si vous n'avez pas encore engagé les fichiers fusionnés. Tu dois faire ça pour compléter la fusion. Vous devez terminer la fusion ou annuler la fusion avant de pouvoir changer de branche.

1
répondu Harry Robbins 2016-09-25 01:32:24

un conflit de fusion se produit lorsque deux branches que vous essayez de fusionner ont toutes deux changé la même partie du même fichier. Vous pouvez générer une liste de conflits avec git status .

lorsque la ligne en conflit est rencontrée, Git éditera le contenu des fichiers touchés avec des indicateurs visuels qui marqueront les deux côtés du contenu en conflit.

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

Lorsque vous corrigez vos fichiers en conflit et vous êtes prêt à fusionner, tout ce que vous avez à faire est de Lancez git add et git commit pour générer la propagation de la fusion. Une fois que le commit a été fait , git push les changements à la branche.

article de référence: git merge .

1
répondu Nesha Zoric 2018-05-22 12:06:38

après que tous les fichiers ont été ajoutés, l'étape suivante est un " git commit ".

" git status " suggérera quoi faire: les fichiers à ajouter sont listés en bas, et une fois qu'ils sont tous terminés, il suggérera un commit en haut, où il explique le statut de fusion de la branche courante.

1
répondu hobgoblin 2018-06-19 12:44:39