7
votes

Pourquoi ne peut-il pas git que la fusion de fichiers change avec un parent / maître modifié?

J'ai un fichier avec une ligne dedans. Je crée une branche et ajoutez une deuxième ligne au même fichier. Économiser et s'engager dans la branche. Je retourne au maître. Et ajoutez une autre ligne différente au fichier. Économiser et s'engager envers le maître. Donc, il y a maintenant 3 lignes uniques au total.

Si j'essaie maintenant de fusionner la succursale à la maîtrise, elle subit un conflit de fusion. P>

Pourquoi ne peut pas giter de simples fusionner chaque ligne, l'une après l'autre ? P>

Ma tentative de fusion se comporte quelque chose comme ceci: p>

PS D:\dev\testing\test1> git merge newbranch
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
PS D:\dev\testing\test1> git diff
diff --cc hello.txt
index 726eeaf,e48d31a..0000000
--- a/hello.txt
+++ b/hello.txt
@@@ -1,2 -1,2 +1,6 @@@
  This is the first line.
- New line added by master.
 -Added a line in newbranch.
++<<<<<<< HEAD
++New line added by master.
++=======
++Added a line in newbranch.
++>>>>>>> newbranch

git

1 commentaires

Ne semble pas comme s'il y a un moyen simple de déterminer l'ordre dans lequel ils doivent être fendus - après tout, l'ordre peut certainement avoir une matière en matière de code exécutable.


4 Réponses :


1
votes

Je peux vous dire pourquoi il ne peut pas fusionner les deux - selon GIT, la ligne 2 de Filea est "telle et telle" alors que la ligne 2 de Fileb est "autre chose". Selon GIT, il tente de créer un fichier à partir de Filea et FileB avec une ligne ayant deux valeurs possibles. Il ne peut pas décider lequel vous voulez, alors il les dépose les deux et vous permet de le réparer.


0 commentaires

12
votes

Disons que la branche de fichier A ressemble à: xxx pré>

et branche b ressemble à: p> xxx pré>

lorsque vous fusionnez, il y a deux façons différentes de le résoudre. Voici une façon: p>

First line
Branch B's second line
Branch A's second line


0 commentaires

2
votes

Disons que vous avez cette ligne:

if(y>10)
printf(something);


0 commentaires

4
votes

Il existe une stratégie de fusion GIT appelée Union qui peut être configurée à partir du fichier .gitaTtributes configuration qui le fera pour vous, mais vous n'aurez aucun contrôle sur le Commandez les lignes contradictoires se retrouvera dans le fichier fusionné et aucun marqueur de conflit n'indique que cela s'est produit.

Vous pouvez également définir une stratégie de fusion personnalisée qui pourrait utiliser certaines connaissances spécialisées sur la structure des fichiers afin de déterminer le bon ordre.


0 commentaires