邪恶合并在git?

时间:2009-09-22 18:48:26

标签: git merge

“man gitglossary”包含邪恶合并的定义:

  

邪恶合并是一种合并,会引入未出现的变化   在任何父母。

我不确定我是否理解作者想要达到的目的。为什么这是邪恶的?

4 个答案:

答案 0 :(得分:20)

因为它把代码放在代码中,没有人要求在那里。好像你有这个代码:

$foo = bar;
$baz = qxx;

这个改变:

$foo = bar;
$foo++;
$baz = qxx;

与此更改合并:

$foo = bar;
$foo--;
$baz = qxx;

以某种方式产生的方式:

$foo = bar;
$foo++;
$foo--;
--$baz;
$baz = qxx;

显然,这是邪恶的。

我猜想在man gitglossary中有足够的关注因为合并算法涉及的越多,他们就越有可能产生这样的东西。

答案 1 :(得分:10)

用Linus Torvalds本人的话(取自git mailing list):

  

“邪恶的合并”是一种不会产生变化的东西   并且实际上并没有解决冲突

答案 2 :(得分:8)

我认为它可能被命名为'邪恶合并',因为在注释文件时会产生“git blame”难以解决的问题(生成行式历史注释)。


当您在主分支上开发特征“A”并且在侧分支上具有“B”特征时,需要邪恶合并,并且这些特征以语义(非文本)方式冲突。一个例子是对全局变量使用相同的名称,具有不同的含义 - 这需要为其中一个特征重命名变量。

对于邪恶的合并“git show --cc”具有非空紧凑组合差异(但我不确定它是否是等价关系;暗示可能仅在一个方向,即“邪恶合并”然后非空“git diff-tree -p --cc”)。

答案 3 :(得分:0)

值得一提的是,“邪恶的合并”中的“邪恶变化”可能会失去默默,同时重新定义一个“邪恶的变化”,其中包含一个不与其他冲突的“邪恶变化”提交。 在such a case中使用--preserve-merges无效。