【发布时间】:2015-08-05 06:05:09
【问题描述】:
这可能最终会成为一个很长的问题,所以请多多包涵。
我在这里遇到了一个关于 git 合并决策的令人难以置信的解释:How does git merge work。我试图建立在这个解释的基础上,看看以这种方式描述 git merge 是否有任何漏洞。本质上,合并文件中是否出现一行的决定可以用真值表来描述:
W:原始文件, A:爱丽丝的分支, 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 路合并导出的真值表模型可能不完整并且遗漏了什么?
【问题讨论】:
-
D 是合并提交,对吧?
标签: git github merge git-merge git-merge-conflict