答案 0 :(得分:4)
在正确answer的第一条评论中对此进行了解释。您不进行提交(通过冲突或--no-commit)进行合并,然后在提交之前向合并添加其他更改。
注意,解决合并冲突并不邪恶,您只需选择存在于冲突的一侧或两侧的代码。如果你添加一些在任何一方都不存在的代码,你现在已经把合并变成了恶。
答案 1 :(得分:2)
That comment是一个关于如何发生“邪恶”合并的有趣例证:
有时最小的手动分辨率导致不存在的线条。
例如。
- '
ours
'更改了某个功能的名称,- '
theirs
'更改返回值- 我们需要一个带有新名称和新返回值的方法。
这是一个邪恶的吗? IOW:有时是必要的邪恶合并
请注意this article在另一个上下文中提到“邪恶合并”(无意合并),并提倡总是进行变基,而不是合并......但是would ignore the danger of a git pull --rebase
。
Junio C Hamano,git的主要维护者,精确地在April 2013 blog post:
在现实生活中发生“邪恶合并”(并且是一件好事)的典型例子是调整语义冲突。它几乎从未与文本冲突有任何关系。
(通常是API更改,例如:您添加参数,而另一位开发人员添加对该函数的调用...但没有任何额外参数)
这意味着你必须在合并时修复语义冲突(就像现在需要一个函数的缺失参数一样),这意味着要创建一行:
这使得合并成为“邪恶合并”。
使用“
git log -c/--cc
”,此路线将在多路补丁输出中以双加显示,以显示“此父母任何一方都不存在“。
-c::
使用此选项,合并提交的diff输出会同时显示每个父项与合并结果的差异,而不是一次显示父项与结果之间的成对差异。
此外,它仅列出了从所有父母修改过的文件。
答案 2 :(得分:0)
当开发人员有必须手动修复的合并冲突时,就会发生这种情况,并且这样做时,他会更改与合并冲突本身无关的代码。 Git的合并算法本身不会插入无关的“邪恶”代码变化。