Допустим, вы и ваш друг извлекли файл и внесли в него некоторые изменения. Вы удалили строку в начале, а ваш друг добавил строку в конце. Затем он передал свой файл, и вам нужно объединить его изменения в вашу копию.
Если вы выполняли двустороннее слияние (другими словами, diff), инструмент мог сравнить два файла и увидеть, что первая и последняя строки различны. Но как он узнает, что делать с различиями? Должна ли объединенная версия включать первую строку? Должен ли он включать последнюю строку?
При трехстороннем слиянии он может сравнивать два файла, но также может сравнивать каждый из них с исходной копией (до того, как кто-либо из вас изменил ее). Таким образом, он может видеть, что вы удалили первую строку, а ваш друг добавил последнюю строку. И он может использовать эту информацию для создания объединенной версии.
Этот слайд из презентации перформанса интересен:
источник
Я написал очень подробный пост об этом . По сути, вы не можете отслеживать удаление / добавление с двухсторонней, очень, очень непродуктивной.
источник
Трехстороннее объединение, при котором два набора изменений в один базовый файл объединяются по мере их применения, а не с применением одного, а затем объединяются с другим результатом.
Например, наличие двух изменений, в которых строка добавляется в одном и том же месте, может интерпретироваться как два добавления, а не как изменение одной строки.
Например
Файл a был изменен двумя людьми, один добавил лося, другой добавил мышь.
Теперь, если мы объединяем наборы изменений при их применении, мы получим (объединение в 3 направления)
Но если мы применим b, то посмотрим на изменение с b на c, это будет выглядеть так, как будто мы просто меняем 'u' на 'o' (двухстороннее слияние)
источник