簡化,這是發生在我們身上:的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