По сути, при git каждое объединение является конфликтом, который оставляет вас с индексом, который содержит три версии каждого файла, версии из каждой ветви и базы. Для этого индекса запускаются различные средства распознавания, которые могут решать для каждого отдельного файла, как решить проблему.
Первый этап - это тривиальный преобразователь, который заботится о таких вещах, как неизмененные файлы, случаях, когда одна ветвь изменила файл, а другая нет, или когда обе ветви содержат одну и ту же новую версию файла.
Впоследствии это плагины, которые смотрят на остальные случаи. Существует плагин, который обрабатывает текстовые файлы, идентифицируя отдельные изменения (например, diff) в одной ветви и пытаясь применить их к другой ветви, прибегая к размещению маркеров конфликта, если это не работает. Вы можете легко подключить свой собственный инструмент слияния на этом этапе, например, вы можете написать инструмент, который знает, как объединять XML-файлы без нарушения правильной формы, или который предоставляет графический интерфейс пользователя, который позволяет интерактивное редактирование и параллельную работу. вид сбоку (например, это делает kdiff3).
Таким образом, представление конфликтов действительно зависит от используемого плагина; плагин по умолчанию для текстовых файлов будет использовать тот же стиль, что и CVS, потому что к нему привыкли люди и инструменты, а маркеры конфликтов являются известной синтаксической ошибкой практически во всех языках программирования.