"man gitglossary" содержит это определение слияния зла:
Слияние зла - это слияние, которое вводит изменения, которые не появляются в любом родителе.
Я не уверен, что понимаю, к чему стремятся авторы. Почему это зло?
"man gitglossary" содержит это определение слияния зла:
Слияние зла - это слияние, которое вводит изменения, которые не появляются в любом родителе.
Я не уверен, что понимаю, к чему стремятся авторы. Почему это зло?
Потому что он помещает вещи в код, который никто никогда не просил быть там. Как будто у вас есть этот код:
$foo = bar;
$baz = qxx;
и это изменение:
$foo = bar;
$foo++;
$baz = qxx;
слилось с этим изменением:
$foo = bar;
$foo--;
$baz = qxx;
таким образом, который каким-то образом произвел:
$foo = bar;
$foo++;
$foo--;
--$baz;
$baz = qxx;
Ясно, что это зло.
Я бы предположил, что этого достаточно, чтобы быть в man gitglossary
, потому что чем больше задействованы ваши алгоритмы слияния, тем более вероятно, что они будут производить такую вещь.
По словам самого Линуса Торвальдса (взятого из git списка рассылки):
"злое слияние" - это то, что вносит изменения, которые произошли ни от и фактически не разрешают конфликт.
Я думаю, что это может быть названо "злым слиянием", потому что трудно решить "git вину" при аннотации файла (генерации линейных аннотаций истории).
При создании функции "А" на главной ветке нужно использовать смешение смеха, а на боковой ветке - "В", и эти функции конфликтуют с семантическим (нетекстовым) способом. Пример будет использовать одно и то же имя для глобальной переменной с разными значениями - это требует переименования переменной для одной из функций.
Для слияния "git show --cc
" имеет непустой компактный комбинированный diff (но я не уверен, является ли это отношением эквивалентности, импликация может быть только в одном направлении, т.е. "злое слияние", а не пустое "git diff-tree -p --cc
" ).
Стоит упомянуть, что "злое изменение" из "злого слияния" может быть потеряно беззвучно, в то время как перезагрузка "злого слияния", содержащая "злое изменение", которое не противоречит другим совершает.
Использование --preserve-merges
не помогает в таком случае.