2017-03-04 1 views
-2

Je sais que si vous modifiez les mêmes lignes dans un fichier et que vous essayez de fusionner les branches, vous obtiendrez un conflit de fusion, car il ne saura pas quelle version conserver. Donc, cela signifie-t-il que si vous modifiez différentes lignes dans un fichier, git serait capable de les fusionner? Cela s'applique-t-il uniquement à l'ajout de nouvelles lignes ou de suppressions? Que faire si dans une branche, le fichier est non modifié/intact et dans un autre, quelqu'un supprime quelques lignes dans ce fichier. Si on fusionne les branches, git garde-t-il la suppression?Git merge (conflit)

Merci!

+0

Copie possible de [Comment résoudre les conflits de fusion dans Git?] (Http://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) – thirtythreeforty

Répondre

0

Lorsque deux utilisateurs travaillent sur le même fichier, il n'y aura généralement pas de conflits de fusion sauf s'ils modifient les mêmes lignes dans le fichier.

Cela signifie que si une ligne est supprimée dans une branche et laissée intacte dans une autre, lorsque les deux branches sont fusionnées, la suppression sera conservée.

2

Git ne fusionne pas les fichiers. Il fusionne les changements. Eh bien, techniquement, il fusionne les branches, mais si nous considérons un seul fichier, il fusionne les modifications introduites sur ces branches. Donc si, comme vous le dites, dans une branche nous n'avons pas modifié de fichier, et dans un autre nous avons supprimé certaines lignes du fichier, si vous fusionnez, alors oui, les suppressions seront conservées et fusionnées. Autrement dit, les fichiers fusionnés finaux auront également ces lignes supprimées.

L'algorithme exact est assez complexe et au moins plus complexe que "pas les mêmes lignes". Par exemple, les algorithmes de fusion ont besoin d'identifier le contexte d'un changement, et pour ce faire, il aura besoin de lignes environnantes qui n'ont pas changé. Donc, si dans une branche vous modifiez une seule ligne, et dans une autre branche que vous modifiez la ligne précédente ou suivante, essayer de fusionner peut aboutir à un conflit de fusion.

+0

Je pense que "fusionne les modifications" est plus techniquement correct que "fusionne les branches", puisque Git trouve juste une base de fusion et compare deux commits à cette base de fusion. En particulier, vous pouvez faire 'git checkout hash1; git fusionne hash2' pour faire une commande détachée HEAD d'une fusion d'une autre validation spécifique. On peut prétendre qu'il s'agit de deux branches anonymes, donc ce n'est pas très clair d'une façon ou d'une autre, et en tout cas ce ne sont que des distinctions fines, et votre réponse est juste. :-) – torek