这可能最终会成为一个很长的问题,所以请耐心等待。
我在这里遇到了一个关于 git merge 决策的令人难以置信的解释:git merge是如何工作的。我试图建立在这个解释的基础上,看看以这种方式描述 git merge 是否有任何漏洞。本质上,合并文件中是否出现一行的决定可以用真值表来描述:
W:原始文件,A:Alice 的分支,B:Bob 的分支
基于这个真值表,很容易想出一个基于行的算法来构造 D:通过查看 A 和 B 的相应行并根据真值表做出决定,逐行构造 D。
我的第一个问题是 case (0, 0, 1),根据我上面发布的链接,它似乎表明虽然这种情况实际上是一个冲突,但 git 通常通过删除该行来处理它。这个案子真的会导致冲突吗?
我的第二个问题是关于删除案例 - (0, 1, 1) 和 (1, 0, 1)。直觉上,我觉得这些案件的处理方式可能会导致问题。假设在 W 中有一个函数 foo()。这个函数实际上从未在任何代码段中调用过。假设在分支 A,Alice 最终决定删除 foo()。然而,在分支 B,Bob 最终决定使用 foo(),并编写了另一个名为 foo() 的函数 bar()。直观地说,根据真值表,似乎合并后的文件最终会删除 foo() 函数并添加 bar(),而 Bob 会想知道为什么 foo() 不再起作用了!这可能让我认为我为 3 路合并导出的真值表模型可能不完整并且遗漏了什么?