На странице руководства git-merge есть несколько стратегий слияния, которые вы можете использовать.
разрешить - Это может разрешить только две головки (то есть текущую ветвь и другую ветвь, из которой вы извлекли), используя алгоритм трехстороннего слияния. Он пытается тщательно выявлять неопределенности слияния и считается в целом безопасным и быстрым.
рекурсивный - это может разрешить только две головы с использованием алгоритма 3-way merge. Если для трехстороннего слияния можно использовать несколько общих предков, оно создает объединенное дерево общих предков и использует его в качестве ссылочного дерева для трехстороннего слияния. Сообщается, что это приводит к меньшему количеству конфликтов слияния, не вызывая слияний в результате тестов, выполненных на реальных коммитах слияния, взятых из истории разработки ядра Linux 2.6. Кроме того, это может обнаруживать и обрабатывать слияния, связанные с переименованием. Это стратегия слияния по умолчанию при извлечении или слиянии одной ветви.
осьминог - это решает более чем двухголовый случай, но отказывается выполнять сложное слияние, которое требует ручного разрешения. Он в первую очередь предназначен для объединения глав веток тем. Это стратегия слияния по умолчанию при вытягивании или объединении нескольких ветвей.
ours - Это разрешает любое количество головок, но результатом слияния всегда является текущая головка. Он предназначен для замены старой истории развития боковых веток.
поддерево - это измененная рекурсивная стратегия. При объединении деревьев A и B, если B соответствует поддереву A, B сначала корректируется, чтобы соответствовать древовидной структуре A, вместо того, чтобы читать деревья на том же уровне. Эта корректировка также выполняется для общего дерева предков.
Когда я должен указать что-то отличное от значения по умолчанию? Какие сценарии лучше всего подходят для каждого?
git merge A B ...
).-X ours
просто потрясающий, только что сэкономил мне час работы.На самом деле единственными двумя стратегиями, которые вы хотели бы выбрать, являются наши, если вы хотите отказаться от изменений, внесенных ветвью, но сохранить ветку в истории и поддерево, если вы объединяете независимый проект в подкаталог суперпроекта (например, «git-gui» in »). Git 'хранилище).
объединение осьминога используется автоматически при объединении более двух ветвей. Решение здесь в основном по историческим причинам, а также для случаев, когда вы сталкиваетесь с угловыми случаями стратегии рекурсивного слияния.
источник
theirs
стратегии слияния (то есть--strategy=theirs
), но естьtheirs
вариантrecursive
стратегии слияния по умолчанию (то есть--strategy=recursive --strategy-option=theirs
или просто-Xtheirs
)."Решить" против "Рекурсивной" стратегии слияния
Рекурсивная текущая стратегия с двумя головами по умолчанию, но после некоторого поиска я наконец нашел некоторую информацию о стратегии слияния «решить».
Взято из книги О'Рейли « Контроль версий с помощью Git ( Amazon )» (перефразировано):
Я успешно объединил деревья, используя «resolv», который не удался с рекурсивной стратегией по умолчанию. Я получал
fatal: git write-tree failed to write a tree
ошибки, и благодаря этому сообщению в блоге ( зеркало ) я попытался "-с разрешить", который работал. Я до сих пор не совсем уверен, почему ... но я думаю, что это потому, что у меня были дублирующие изменения в обоих деревьях, и я решил "пропустить" их правильно.источник
Поскольку ответы выше не показывают все детали стратегии. Например, какой - то ответ отсутствует подробность о импортной
resolve
опции иrecursive
который имеет много вариантов , как к югуours
,theirs
,patience
,renormalize
и т.д.Поэтому я бы порекомендовал посетить официальную
git
документацию, в которой объясняются все возможные особенности функций:https://git-scm.com/docs/merge-strategies
источник