邪恶在git中融合?

邪恶在git中融合?,git,merge,Git,Merge,“人”包含邪恶合并的定义: 邪恶的合并是指引入未出现的更改的合并 在任何父母身上 我不确定我是否理解作者试图表达的观点。为什么它是邪恶的?因为它把没有人要求的东西放入代码中。好像你有这样的代码: $foo = bar; $baz = qxx; 这一变化: $foo = bar; $foo++; $baz = qxx; $foo = bar; $foo--; $baz = qxx; 已与此更改合并: $foo = bar; $foo++; $baz = qxx; $foo = bar; $

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

邪恶的合并是指引入未出现的更改的合并 在任何父母身上


我不确定我是否理解作者试图表达的观点。为什么它是邪恶的?

因为它把没有人要求的东西放入代码中。好像你有这样的代码:

$foo = bar;
$baz = qxx;
这一变化:

$foo = bar;
$foo++;
$baz = qxx;
$foo = bar;
$foo--;
$baz = qxx;
已与此更改合并:

$foo = bar;
$foo++;
$baz = qxx;
$foo = bar;
$foo--;
$baz = qxx;
以某种方式产生:

$foo = bar;
$foo++;
$foo--;
--$baz;
$baz = qxx;
显然,这是邪恶的


我想这是一个值得关注的问题,因为你的合并算法越复杂,就越有可能产生这样的结果。

我认为它可能被命名为“邪恶合并”,因为在注释文件时“git责备”很难解决(生成行历史注释)


当您在主分支上开发功能“A”,在侧分支上开发功能“B”,并且这些功能在语义(非文本)方面存在冲突时,可能需要邪恶合并。例如,全局变量使用相同的名称,但含义不同--这需要为其中一个功能重命名变量


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

用Linus Torvalds自己的话说(摘自:

“邪恶合并”是指既不进行任何更改也不进行任何更改的东西 双方并没有真正解决冲突


值得一提的是,来自“邪恶合并”的“邪恶更改”可能会在对包含“邪恶更改”的“邪恶合并”重定基址时悄无声息地丢失,该“邪恶更改”与其他提交不冲突。
使用
--preserve merges
没有帮助。

若要产生此效果,只需使用--no commit选项调用git merge,添加更多更改,签入并提交。预生成的合并提交消息将自动使用。@Jefromi根据此定义,任何需要手动解决冲突的合并都是邪恶的合并?T这与@chaos所说的有很大的语义区别;你可能会在合并过程中得到他的结果,而不会产生任何冲突。这真是邪恶的。--$baz;从哪里来的?我不认为GIT随机生成代码。对我来说,在没有人澄清是什么的情况下合并增量和减量已经够邪恶的了正确的代码。结果是这两个更改破坏了代码。不知从何而来的行必须由手动“更正”的人输入合并。在这一点上,这不是GIT的错?!?我明白了。邪恶的合并是引入非程序员编写的代码的合并过程。再一次,我认为,如果没有人给予足够的关注,合并可以产生一个增量然后一个减量,这已经够邪恶的了。合并使得两个版本毫无意义。@Xaade:
GIT
Itself不会产生那个结果。它会产生一个带有冲突标记的版本(即:
>分支
,它不会提交。然后由程序员手动解决冲突。如果他们这样做而不引入新代码,那么它就不是邪恶的。因此,没有
--$baz;
行,chaos的最后一个示例将不是邪恶的合并。这将是一个愚蠢的合并,但错误将在于程序员,而不是w直觉上,@chaos”的反应感觉更正确,但我知道你对这些东西很在行;)感觉就像你在描述一个很好的旧合并冲突,两个人解决了同一个问题的重叠部分——甚至可能是同一个问题。一旦合并完成,你为什么要重新创建它?将这一“相当正常”的事件称为“邪恶”不是过于诗意了吗?解决冲突通常涉及选择一个版本而不是另一个版本,有时选择一个版本行而不是其他版本的行。邪恶合并的行不在其任何父版本中,因此即使使用最复杂(通用)的合并策略也无法自动重新创建。(删除了关于“邪恶”的行)合并和自动处理)我认为您正确地强调了“通常”。有时,最小的手动分辨率会导致不存在的行。(例如,“我们的”更改函数名称,“他们的”更改返回值,我们需要一个具有新名称和新返回值的方法).这是一个邪恶的东西吗?瞧:邪恶的合并有时是必要的吗?+1我从这里来到这里,我发现认识到这并不是git的邪恶合并是非常有帮助的:邪恶的合并不是有时会发生的自然现象,而是人们在git中有时会做的事情(就像人们有时会导致其他事故,比如推动——强制改变公共回购协议)。这里的要点是:不要这样做!(或者至少保留合并语义)如果他是对的,这就是莱纳斯·托瓦尔兹自己的话:“邪恶的合并”是一种对双方都不做更改但实际上并没有解决冲突的东西。请注意,如果您重复合并(如使用Git 2.18的新
--重新设置合并的基础
功能),进行邪恶合并时您采取的特殊操作或其他人进行邪恶合并时采取的特殊操作将不会自动重复,合并结果将不同。换句话说,合并将失去其“邪恶性”。这可能是将其称为“邪恶”的另一个原因,尤其是如果结果是好的/重要的。这应该是公认的答案,或者至少应该与上面的例子合并。@JoaoTavora,合并将是邪恶的。亲爱的@matt,你犯了我那一天的错误