邪恶合并在Git?
“人gitglossary ”包含这个邪恶合并的定义:
一个邪恶的合并是一个合并,引入不出现在任何父母的变化。
我不确定我是否理解这些作者正在试图解决的问题。 为什么它是邪恶的?
因为它把代码放在没有人要求的地方。 就好像你有这样的代码:
$foo = bar; $baz = qxx;
而这个变化:
$foo = bar; $foo++; $baz = qxx;
与这个变化合并:
$foo = bar; $foo--; $baz = qxx;
以某种方式产生:
$foo = bar; $foo++; $foo--; --$baz; $baz = qxx;
显然,这是邪恶的。
我猜想,在man gitglossary
有足够的关注,因为你的合并algorithm越多,他们就越有可能产生这样的事情。
我认为它可能被命名为“邪恶的合并”,因为在注释文件(生成行顺序历史注释)时解决“混帐”是一个难题。
当你在主分支上开发了特征“A”,并且在侧枝上开发了特征“B”时,就需要合并,这些特征与语义(非文本)方式相冲突。 一个例子是使用全局variables的相同名称,具有不同的含义 – 这需要重命名variables的function之一。
对于邪恶的合并“ git show --cc
”有非空的紧凑组合diff(但我不确定它是否是等价关系;含义可能只在一个方向上,即“邪恶合并”,然后是非空的“ git diff-tree -p --cc
“)。
用Linus Torvalds本人的话(从git邮件列表中 ):
一个“邪恶的合并”是一种双方都不能改变,实际上并没有解决冲突的事情
值得一提的是,一个“邪恶的合并”的“邪恶变化”可以默默地失去,而一个包含与其他承诺不相抵触的“邪恶变化”的“邪恶合并”将会重新浮出水面。 在这种情况下使用--preserve-merges
不起作用。