【发布时间】:2018-03-28 00:30:54
【问题描述】:
简而言之,这就是发生在我们身上的事情:
-
从
master上的这个文件开始:class SomeClass { ... } 创建分支
featureAoff `master。-
在
featureA,将文件更改为:class SomeClass { ... } extension SomeClass { // implement feature A } - 创建分支
featureBoff `master。 -
在
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 代码中,一侧有两个扩展,另一侧有一个带有嵌套类型的枚举。
【问题讨论】:
-
是否使用了merge strategy?
-
@MarcinArmatys 据我所知,只使用了默认的
git merge。
标签: git merge git-merge git-merge-conflict