简化,这是发生在我们身上:的Git默默合并为更新应该是什么冲突
开始与这个文件有关
master
:class SomeClass { ... }
创建分支
featureA
关`主。在
featureA
,更改文件:class SomeClass { ... } extension SomeClass { // implement feature A }
- 创建分支
featureB
关`主。 在
featureB
,更改文件:class SomeClass { ... } class OtherClass { // implement feature B }
- 合并
featureB
为master
。 - 将
featureA
合并为master
。
我们预计是:
class SomeClass {
...
}
extension SomeClass {
// implement feature A
}
class OtherClass {
// implement feature B
}
或两个以相反的顺序添加,这是公平的。
实际上,Git应该可能会报告一个冲突:它没有关于语义的知识,并且两个“同时”更改无法调和。
我们得到是:
class SomeClass {
...
}
class OtherClass {
// implement feature B
}
而不会发生冲突。也就是说,后面的提交(在另一个提交之前合并)默默地胜出。
这可以预防吗?怎么样?
注意:如果我用上述步骤在一个干净的回购库中尝试此操作,则会在最后一步中遇到合并冲突。所以,无论这个问题是根植于我们在回购的其他方面。暗示赞赏,我不明白什么可能会影响事情。或者,问题是diff算法被更复杂的代码绊住了;在生产Swift代码中,我们在一边有两个扩展,另一边有嵌套类型的枚举。
是否使用过任何[合并策略](https://git-scm.com/docs/merge-strategies)? –
@MarcinArmatys据我所知,只有默认的'git merge'已被使用。 – Raphael