Проблема здесь состоит в том, что -X theirs
затрагивает только конфликтов слияния в существующий файл. Merge конфликты могут происходить также:
- добавить/добавить: с обеих сторон (
HEAD
и тому, чтобы быть востребовано/слиты фиксации) добавляют один и тот же файл.
- изменить/удалить: одна сторона вносит изменения в файл, а другая сторона полностью удаляет файл.
- rename/delete: одна сторона переименовывает файл, а другая сторона полностью удаляет файл.
Вы получаете первый из них, но все три причины Git прекращают работу и требуют внешней помощи для решения проблемы.
... с мерзавцем, добавив второй файл называется path/to/first_file~[commit hash]...[truncated commit message]
Git не делает этого, но различные внешние помощник сливаться инструменты делают.
В любом случае вы должны вручную разрешить конфликт (путем выбора файла, который нужно добавить, или смешивания двух файлов по мере необходимости). Чтобы автоматизировать это, вам нужно будет написать некоторый код - по существу, чтобы написать свой собственный инструмент слияния.
Стоит еще раз подчеркнуть, что это влияет только на слияние конфликты. Например, если одна сторона изменяет color
на colour
, а другая сторона изменяет orange
на fruit
, но ни одно из этих изменений не «слишком близко» друг к другу, чтобы вызвать конфликт, вы можете завершить работу с файлом, который описывает ваши объекты как фрукты в цвете. (Обычно такие изменения влияют на же линии, так что они вступают в конфликт, так что -X theirs
улавливает только изменение одной из сторон.)
«Git не делает этого, но различные внешние помощник сливаться инструменты делают» Какой хелперов бы это быть? Это происходит как на моей частной установке Ubuntu 16.04, так и на Heroku. Я не знаю, какие внешние помощники установлены. Я заметил, что это происходит и с git merge. –
У вас есть ссылка, подробно описывающая внешние помощники?:) –
Я никогда не использую ни один из других инструментов, но я проверял внутри источника Git, чтобы увидеть, используют ли какие-либо из его собственных распределенных инструментов эти имена файлов (а они нет). По умолчанию Git останавливается с конфликтом слияния, и вы запускаете 'git mergetool' для запуска своего настраиваемого инструмента. Вы также можете определить пользовательские сменные * драйверы * через различные файлы конфигурации и '.gitattributes', и они могут это сделать. – torek