Конфликт
A modify/delete
является конфликтом high level . Драйверы слияния, определенные в .gitattributes
, используются только для разрешения конфликтов low level : драйвер слияния используется только тогда, когда файл (a) существует во всех трех версиях (базовая и обе подсказки ветвления) и (б) отличается во всех трех версиях. Здесь файл существует в двух версиях - базовая и одна ветвь - и отличается в этих двух версиях, но третья версия просто полностью удаляется, и драйвер слияния никогда не вызывается.
Для recursive
Стратегии, resolve
и subtree
, конфликты высокого уровня всегда приводят к конфликту слияния и слиянию в середине процесса. Конфликты высокого уровня просто никогда не возникают в стратегии ours
(-s ours
, очень отличающейся от расширенной опции -X ours
), поскольку она смотрит только на текущее дерево. Конфликты высокого уровня в octopus
являются (я думаю) фатальными: слияние осьминога полностью прервано. 2
Я хочу избежать конфликтов слияния при изменении в A вфайлы, которые были удалены в B.
Для этого необходимо написать стратегию слияния . Это сложно. 1 См. Мой ответ на git "тривиальную" стратегию слияния, которая непосредственно совершает конфликты слияния .
1 Основным доказательством «жесткого», которое я имею, является тот факт, что Git поставляется с этими пятью стратегиями - resolve
, recursive
, ours
, octopus
и subtree
- и, несмотря на более чем десятилетнее развитие, Gitдо сих пор есть только эти пять стратегий.
2 На самом деле я никогда не делаю слияния осьминога, поэтому мой опыт здесь ограничен.