我看了一下git的合并和git SO变基上相关的问题,但我还不能完全理解什么是引擎盖下发生。
这里是我们的分支的情况:
MASTER------------------------
\ \
\ \----Feature B---
\ \
\-----Feature A----------\---Feature A+B
我们必须从主茎在不同的时间,现在我们要在2个分支合并2个功能分支。我们要遵循first rebase then merge
的做法,但是,当我们重订特点A到要素B,我们得到的冲突。这是预期的,因为这两个功能(主动)在同一个领域的变化。但是奇怪的是,同样的冲突不断git rebase --continue
后重新出现。这驱使我们疯了,所以我们最终放弃了底垫,并用git merge
。原来,冲突实际上是很容易解决。
我的问题是双重的:
git rebase
适合你的情况?或者只重订好了在几分钟(1或2)的变化拉动?rebase
化解矛盾每次一个,但通过比较其承诺是什么?上SO相关文章:
基于这样的事实,Feature A
和Feature B
似乎共享分支,我说没有。
垫底是合并分支机构,而不必合并提交(即有两个或更多的家长即提交)使其显示为一个线性的历史的一种方式。它最适合用来合并地方分支机构,即分公司,仅在本地资源库中,并没有被发布到其他人。为什么?因为至少有两个原因:
SHA-1
)。这意味着,一旦你推衍合的提交到共享的分支,他们将出现全新提交给任何人获取他们在当地的回购协议,即使他们仍然包含相同的变化。现在,如果有人在旧的在此期间的顶部增加了新的提交,他们将不得不移动它们。这就造成不必要的混乱。只是一个普通的合并。不同的是,git rebase
在合并的前一个从公共父开始的顶部一次一个承诺。 git merge
合并两次提交 - 与他们所做的所有修改 - 作为一个单一的操作,所以你只需要一次解决冲突。
作为@Jubobs在评论中指出,Git的确实有解决发生多次冲突的自动化解决方案:git rerere
,或“再利用记录的决议”。
当您在您的配置文件(rerere.enabled true
)每一个合并冲突发生时使rerere,Git会记录下冲突的文件的状态之前和之后,你将它们合并。下一次出现相同的冲突 - 对参与合并的双方完全相同的线路冲突 - Git会自动为它以前记录相同的分辨率。它也将让你在合并输出知道这一点:
冲突(含量):合并冲突“somefile” 解决“somefile”使用先前的分辨率。
在这里,你可以找到more details如何处理使用git rerere
冲突。