Git合并的顺序是否重要?

时间:2018-04-08 07:13:47

标签: git git-merge

假设我有两个分支BA。是否保留以下属性?

  • 当且仅当B合并到B冲突时,才会将A合并到A个冲突中。
  • B合并到B后,我的文件内容与A合并到connect by level后的文件内容相同。

4 个答案:

答案 0 :(得分:7)

我甚至会说,如果你的两个属性不符合,那么你在git merge找到了一个错误。

理由:在所有方向同时合并是构建git的目的。这就是为什么git一直使用关闭的三向合并的原因:它是提供正确合并结果的唯一方法。从数学的角度来看,这种3向合并是对称的,它基本上根据来自分散状态R = (A - B) + (C - B) + BB的基础提交A来计算状态C合并顺序的唯一区别应该是合并提交的父级顺序。

编辑:如果您对更多详细信息感兴趣,torek's answer就是您要找的。它为您提供了有关不同合并策略的所有技术细节,并指出由于在非常高的抽象级别编写而我的答案不精确。

答案 1 :(得分:1)

我不知道algorythms,但我相信这两个问题都非常“肯定”。如果你找到了一个反例,那么看它会很好。到目前为止,我不知道任何。

我会检查一些不明确的案例,例如,如果一个文件的一部分被一个人复制并由另一个人修改。哪个副本要更改?由于没有单一的正确答案,这可能取决于父母的命令等次要原因。

答案 2 :(得分:0)

当两个人在同一个文件中更改相同的行,或者如果一个人决定删除它而另一个人决定修改它时,会发生合并冲突。

基本上,

  • 如果尝试将B合并到A时存在冲突, 当您尝试将A合并到B时会出现冲突。

  • 将A合并为B和B合并为A的结果必须相同(如果没有冲突)。

这个问题纯属合乎逻辑。因此,如果有人认为我的逻辑答案是错误的或需要改进,请随时纠正我或编辑它。

答案 3 :(得分:0)

将A视为主分支,将B视为子分支。

  1. 现在创建一个readme.txt文件并添加一些内容,即"更改1"分阶段并提交它。
  2. 现在创建另一个子分支B,对readme.txt进行一些更改i,e追加"更改2" readme.txt并提交它。
  3. 切换回主分支A,现在您看不到子分支B所做的任何更改。反映B分支从主分支所做的相同更改,即从B到A
  4. 一旦你在主分支A,你追加"改变3" readme.txt文件并提交它。
  5. 现在结帐到子分支B,追加"更改4" readme.txt并提交您所做的更改
  6. 当您在子分支B中时,将主分支A合并到子分支B会导致合并冲突
  7. 由于您没有看到文字"更改3"在子分支B的readme.txt文件中,您没有附加文本"更改4" to readme.txt文件。相反,你要覆盖readme.txt,即合并readme.txt文本的内容,其中包含"更改3"到文本"更改4"

    从上面的例子中,两个属性都很好。