Git 是否存在附加合并策略?

Git 是否存在附加合并策略?,git,version-control,Git,Version Control,我有分行主管,那里有Prova.c文件: int main() { printf("Ciao mondo"); } 还有一个名为c++版本的分支,我在其中修改了相同的Prova.c文件,如下所示: #include <iostream> using namespace std; int main() { cout<<"Ciao mondo"<<endl; } 我在主文件中得到了这个文件Prova.c: #include <ios

我有分行主管,那里有Prova.c文件:

int main()
{
     printf("Ciao mondo");
}
还有一个名为c++版本的分支,我在其中修改了相同的Prova.c文件,如下所示:

#include <iostream>

using namespace std;
int main()
{
     cout<<"Ciao mondo"<<endl;
}
我在主文件中得到了这个文件Prova.c:

#include <iostream>

using namespace std;
int main()
{
    cout<<"Ciao mondo"<<endl; \\I don't like this
}
#包括
使用名称空间std;
int main()
{

cout听起来好像有这样一种情况:一个分支有一个未修改的代码区域(
master
),另一个分支有一个已修改的代码区域(
c++版本
)。当您遇到这种情况并合并到修改后的分支中时,Git会将所有这些更改拉入,因为合并的结果是双方所有更改的总和

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

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

此外,这样的策略也不是很有用,因为它不清楚您希望添加的行的顺序(是在现有行之前还是之后?),因此每次合并都必须导致冲突,以便您可以修复


这是一种合并在语法上成功,但在语义上导致不必要的更改的情况。您可以使用
git commit--amend
修改合并以更改合并的结果,但除此之外,git对这种情况提供的功能并不多。

显示
git log--graph--dec的结果orate--oneline--all
。我不知道你从哪里得到了分支的概念,但我猜,
c++版本
是从
master
分支出来的,当git去合并它时,没有任何更改与任何
master
更改相冲突,所以它把所有的更改都拿走了。谢谢,现在我理解了git的合并策略不存在“加法”方法。
#include <iostream>

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