是否存在加法合并策略



我有分支主机,其中有文件Prova.c:

int main()
{
printf("Ciao mondo");
}

和一个名为c++版本的分支,在那里我修改了相同的文件Prova.c,如下所示:

#include <iostream>
using namespace std;
int main()
{
cout<<"Ciao mondo"<<endl;
}

在主机上,我执行命令(在两个分支中进行相关的添加和提交):

git merge c++version

我在主文件里找到这个Prova.c:

#include <iostream>
using namespace std;
int main()
{
cout<<"Ciao mondo"<<endl; \I don't like this
}

我不喜欢这个结果。我想要印花和高级定制,但我只有高级定制。我可以采用什么合并策略(或其他解决方案)?或者在极端情况下,我怎么能每次都强制要求我解决所有冲突?

听起来,您有一个分支有一个未修改代码区域(master),而一个分支已被修改(c++version)。当您遇到这种情况并在修改后的分支中进行合并时,Git会拉入所有这些更改,因为合并的结果是双方所有更改的总和。

在这种情况下,正在进行的部分更改是删除printf行并插入cout行。添加和删除都是这一变化的一部分。

只有当双方都更改了相同的代码时,才会产生冲突。如果只更改了一侧,则合并包含该更改。合并就是这样运作的。Git确实提供了只采取一方或另一方的策略,但在这种情况下,这对你没有帮助,因为你想要的是不删除任何行,而Git没有提供这样的策略。

此外,这样的策略不会很有用,因为不清楚你希望以什么顺序添加行(是在现有行之前还是之后?),因此每次这样的合并都必须导致冲突,这样你才能解决这个问题。

在这种情况下,合并在语法上成功了,但在语义上却产生了不希望的变化。您可以使用git commit --amend修改merge以更改合并的结果,但除此之外,Git确实没有为这种情况提供太多功能。

最新更新