首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用实例理解重基冲突与合并冲突

用实例理解重基冲突与合并冲突
EN

Stack Overflow用户
提问于 2019-10-04 08:23:23
回答 2查看 96关注 0票数 1

我正在尝试找出一个示例,其中重基冲突是,与合并冲突不同的

我明白个别术语--重新定位和合并--意味着什么。但我不太明白他们怎么会制造不同的冲突。

有人能给我举个例子指出正确的方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-04 08:33:03

下面是一个简单的、有点做作的例子。假设您根据这个图表从主分支中分离出来:

代码语言:javascript
复制
main:   .. A -- D
            \
feature:     B -- C

并且在某个源代码文件中有一个函数:

代码语言:javascript
复制
function foo() {
    int a = 3;
    return a;
}

假设出于任何原因,您决定在commit B中添加一行:

代码语言:javascript
复制
function foo() {
    int a = 3;
    int b = 10;
    return a;
}

在第二个提交C中,您删除了添加的行,保留了从主分支中分支时的代码。

同时,在主分支中,其他人现在已经做了一个新的提交D,它还添加了一个新行:

代码语言:javascript
复制
function foo() {
    int a = 3;
    int c = 5;
    return a;
}

如果要在主分支上重新设置功能分支,代码将从D提交中的int c = 5行开始。但是,重新应用您的第一个B提交将产生合并冲突,因为两个家长都试图在相同的函数中向相同的位置添加一个新行。您将解决该冲突,然后选择您想要的任何版本。

但是,如果要将主分支合并到分支中,则不会发生冲突。原因是您的特性分支是从C提交开始的,C提交的源代码与主分支中的A提交相同。因此,只有一个函数的变化会发生,来自主分支,并且很可能没有冲突。

合并冲突与合并冲突的经验法则是,通常情况下,它们可能不一样。将您的工作(提交)重新部署到一个新的基础之上,每次重新提交都会导致合并冲突。另一方面,合并会在目标分支中同时引入一个增量。

票数 2
EN

Stack Overflow用户

发布于 2019-10-04 13:44:29

在实践中,冲突差异通常产生于这样一个事实,即重基一次只应用一个提交修补程序,而合并只查看每个分支的最终状态(以及合并基--分支的最后一个提交)。

所以如果你有

代码语言:javascript
复制
o --- x <--(master)
 \         
  A - B - C  <-(feature)

并且希望将featuremaster结合起来,也许o-A修补程序与o-x冲突,尽管o-C补丁没有--在最简单的情况下是因为BC取消了A所做的事情。然后,重基将产生合并不会产生的冲突。

此外,您可能在重基期间解决A的冲突,并且在应用BC时更改重基的过程。这有点难以想象,因为这取决于您如何编辑工作树在重新部署冲突解决,但从理论上说,这是可能的。

此外,与重基相比,合并可能导致不同的最终内容。我想您可以将这些场景操作为冲突不同的情况。

内容为何不同?当然,它不应该出现,而且在我看来,这些案例都是奇怪的边缘案例,在我看来,这是因为rebase过于努力地试图变得聪明--但不管它们在实践中几乎从未出现过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58232536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档