假设我有两个分支B
和A
。是否保留以下属性?
B
合并到B
冲突时,才会将A
合并到A
个冲突中。B
合并到B
后,我的文件内容与A
合并到connect by level
后的文件内容相同。答案 0 :(得分:7)
我甚至会说,如果你的两个属性不符合,那么你在git merge
找到了一个错误。
理由:在所有方向同时合并是构建git
的目的。这就是为什么git
一直使用关闭的三向合并的原因:它是提供正确合并结果的唯一方法。从数学的角度来看,这种3向合并是对称的,它基本上根据来自分散状态R = (A - B) + (C - B) + B
和B
的基础提交A
来计算状态C
。 合并顺序的唯一区别应该是合并提交的父级顺序。
编辑:如果您对更多详细信息感兴趣,torek's answer就是您要找的。它为您提供了有关不同合并策略的所有技术细节,并指出由于在非常高的抽象级别编写而我的答案不精确。
答案 1 :(得分:1)
我不知道algorythms,但我相信这两个问题都非常“肯定”。如果你找到了一个反例,那么看它会很好。到目前为止,我不知道任何。
我会检查一些不明确的案例,例如,如果一个文件的一部分被一个人复制并由另一个人修改。哪个副本要更改?由于没有单一的正确答案,这可能取决于父母的命令等次要原因。
答案 2 :(得分:0)
当两个人在同一个文件中更改相同的行,或者如果一个人决定删除它而另一个人决定修改它时,会发生合并冲突。
基本上,
如果尝试将B合并到A时存在冲突, 当您尝试将A合并到B时会出现冲突。
将A合并为B和B合并为A的结果必须相同(如果没有冲突)。
这个问题纯属合乎逻辑。因此,如果有人认为我的逻辑答案是错误的或需要改进,请随时纠正我或编辑它。
答案 3 :(得分:0)
将A视为主分支,将B视为子分支。
由于您没有看到文字"更改3"在子分支B的readme.txt文件中,您没有附加文本"更改4" to readme.txt文件。相反,你要覆盖readme.txt,即合并readme.txt文本的内容,其中包含"更改3"到文本"更改4"
从上面的例子中,两个属性都很好。