相关疑难解决方法(0)

你如何检测git中的邪恶合并?

我已经创建了一个简单的git repo来说明我的问题,可以在GitHub上找到:https://github.com/smileyborg/EvilMerge

这是回购历史的例证:

master          A---B---D---E-----G-----I
                 \     /     \         /
another_branch    ----C       \       /
                               \     /
another_branch2                 F---H
Run Code Online (Sandbox Code Playgroud)

(在GitHub上的实际回购中,D4a48c9,I48349d.)

D是一个"简单"的邪恶合并,其中合并提交"正确"解决了合并冲突,但也产生了一个不相关的"邪恶"变化,这两个变化在父系统中都不存在.通过git show -c在此提交上使用,可以发现此合并的"邪恶"部分,因为输出包括++--(而不是单个+-)以指示父级中不存在的更改(请参阅上下文的答案).

I一种别样邪恶的合并,其中合并提交"正确"的解决合并冲突(从变化所引起F,以file.txt与变化相冲突G),也有"邪恶"丢弃到一个完全不同的文件中所做的更改file2.txt(有效撤消变化H).

你怎么知道这I是一个邪恶的合并?换句话说,您可以使用哪些命令来发现I不仅手动解决冲突,而且还无法合并应该具有的更改?

编辑/更新:什么是邪恶合并?

正如下面的RenéLink所指出的那样,很难(或许不可能)定义一套通用标准来识别"邪恶合并".然而,就像最高法院大法官斯图尔特所说的关于色情内容一样,当你看到邪恶的合并是你所知道的.

因此,或许更好的问题是:在合并提交中可以使用什么git命令来获得仅在合并提交本身中引入的所有新颖更改的diff输出.这种差异应包括:

  • 所有合并冲突解决方案(至少,如果决议涉及的事情比选择一个父母的变化比另一个更复杂)
  • 父母之间不存在的所有添加或删除(如中所示D)
  • 其中一个父项中存在的所有更改但合并提交丢弃(如中所示I)

这里的目标是能够让人类看看这个输出并知道合并是否成功或(意外或恶意)"邪恶",而 …

git git-merge

28
推荐指数
4
解决办法
2755
查看次数

标签 统计

git ×1

git-merge ×1