邪恶合并在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不起作用。