Dans la page de manuel sur git-merge, vous pouvez utiliser un certain nombre de stratégies de fusion.
résoudre - Cela ne peut résoudre que deux têtes (c'est-à-dire la branche actuelle et une autre branche dont vous avez tiré) en utilisant l'algorithme de fusion à 3 voies. Il essaie de détecter soigneusement les ambiguïtés de fusion croisées et est généralement considéré comme sûr et rapide.
récursif - Cela ne peut résoudre que deux têtes en utilisant un algorithme de fusion à 3 voies. Lorsqu'il existe plusieurs ancêtres communs pouvant être utilisés pour la fusion à 3 voies, il crée un arbre fusionné des ancêtres communs et l'utilise comme arbre de référence pour la fusion à 3 voies. Il a été signalé que cela entraîne moins de conflits de fusion sans provoquer de mauvaises fusions par les tests effectués sur les validations de fusion réelles tirées de l'historique de développement du noyau Linux 2.6. De plus, cela peut détecter et gérer les fusions impliquant des renommages. Il s'agit de la stratégie de fusion par défaut lors de l'extraction ou de la fusion d'une branche.
Octopus - Cela résout plus de cas à deux têtes, mais refuse de faire une fusion complexe qui nécessite une résolution manuelle. Il est principalement destiné à être utilisé pour regrouper les têtes de branche de sujet. Il s'agit de la stratégie de fusion par défaut lors de l'extraction ou de la fusion de plusieurs branches.
nôtre - Cela résout un nombre illimité de têtes, mais le résultat de la fusion est toujours la tête de branche actuelle. Il est destiné à remplacer l'ancien historique de développement des branches latérales.
subtree - Il s'agit d'une stratégie récursive modifiée. Lors de la fusion des arbres A et B, si B correspond à un sous-arbre de A, B est d'abord ajusté pour correspondre à la structure arborescente de A, au lieu de lire les arbres au même niveau. Cet ajustement est également effectué sur l'arbre des ancêtres communs.
Quand dois-je spécifier quelque chose de différent de la valeur par défaut? Quels scénarios conviennent le mieux à chacun?
git merge A B ...
).-X ours
est génial, m'a juste sauvé une heure de travail.En fait, les deux seules stratégies que vous souhaitez choisir sont les nôtres si vous souhaitez abandonner les modifications apportées par la branche, mais conservez la branche dans l'historique et sous - arbre si vous fusionnez un projet indépendant dans le sous-répertoire du superprojet (comme `` git-gui '' dans '' référentiel git).
octopus merge est utilisé automatiquement lors de la fusion de plus de deux branches. La résolution est ici principalement pour des raisons historiques et lorsque vous êtes touché par des cas de coin de stratégie de fusion récursive .
la source
theirs
stratégie de fusion (c'est-à-dire--strategy=theirs
), mais il y a unetheirs
option pour larecursive
stratégie de fusion par défaut (c'est-à-dire--strategy=recursive --strategy-option=theirs
, ou juste-Xtheirs
).Stratégie de fusion "Resolve" vs "Recursive"
Récursif est la stratégie à deux têtes par défaut actuelle, mais après quelques recherches, j'ai finalement trouvé des informations sur la stratégie de fusion "résoudre".
Extrait du livre O'Reilly Version Control with Git ( Amazon ) (paraphrasé):
J'ai fusionné avec succès des arborescences en utilisant "résoudre" qui a échoué avec la stratégie récursive par défaut. J'obtenais des
fatal: git write-tree failed to write a tree
erreurs, et grâce à ce billet de blog ( miroir ), j'ai essayé "-s résoudre", qui a fonctionné. Je ne sais toujours pas exactement pourquoi ... mais je pense que c'est parce que j'ai eu des changements en double dans les deux arbres et que je les ai résolus "sautés" correctement.la source
Comme les réponses ci-dessus ne montrent pas tous les détails de la stratégie. Par exemple, une réponse ne contient pas les détails sur l'importation
resolve
option et lerecursive
qui a de nombreuses options de sous commeours
,theirs
,patience
,renormalize
, etc.Par conséquent, je recommanderais de visiter la
git
documentation officielle qui explique toutes les fonctionnalités possibles:https://git-scm.com/docs/merge-strategies
la source