我正在尝试提出一个示例示例,其中基准冲突与合并冲突不同。
我了解各个术语-重新设置和合并-的含义。但是我不太了解他们如何造成不同的冲突。
有人可以通过示例向我指出正确的方向吗?
这里是一个简单且有些人为的示例。假设您根据此图从主分支分支出来:
main: .. A -- D
\
feature: B -- C
并且您在某个源代码文件中具有一个功能:
function foo() {
int a = 3;
return a;
}
假设,由于某种原因,您决定在提交B中添加一行:
function foo() {
int a = 3;
int b = 10;
return a;
}
在第二个提交C中,您删除了添加的行,并保留了从主分支分支出来时的代码。
同时,在主分支中,其他人现在进行了新的提交D,并添加了新行:
function foo() {
int a = 3;
int c = 5;
return a;
}
如果要在主分支上重新建立功能分支,则代码将从D提交中的int c = 5
行开始。但是,然后重新应用您的第一个B提交将产生合并冲突,因为两个父级分别尝试在同一位置,同一功能中添加新行。您将解决该冲突,然后选择所需的版本。
然而,如果您改为将主分支merge到分支中,则不会发生冲突。这样做的原因是,功能分支从C提交开始,其源代码与主分支中的A提交identical相同。因此,仅对功能进行一次更改(来自主分支),并且可能不会发生冲突。
重定基数与合并中合并冲突的经验法则是,通常它们可能并不相同。重定基础将在新的基础上重新引入您的工作(提交),并且每次重新提交都可能导致合并冲突。另一方面,合并一次将单个增量引入目标分支。