Git merge自动添加所有新行

Git merge自动添加所有新行,git,merge,git-merge,Git,Merge,Git Merge,//为清晰起见进行了编辑 是否有任何方法可以实际合并或理论上合并两个提交,并在它们之间保留所有不同的内容 假设您有一个主分支,其中有一个名为index.js的文件 //master //index.js alert('A'); alert('Z'); master的两个分支如下所示: //Branch 1 //index.js alert('A'); alert('B'); alert('Z'); //Branch 2 //index.js alert('A'); alert('C'); a

//为清晰起见进行了编辑

是否有任何方法可以实际合并或理论上合并两个提交,并在它们之间保留所有不同的内容

假设您有一个主分支,其中有一个名为index.js的文件

//master
//index.js
alert('A');
alert('Z');
master的两个分支如下所示:

//Branch 1
//index.js
alert('A');
alert('B');
alert('Z');

//Branch 2
//index.js
alert('A');
alert('C');
alert('Z');
master:  A -- B -- C
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D'
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D' -- E'
branch1: A -- B -- C -- D'
branch2: A -- B -- C -- D' -- E'
将分支1合并到分支2的理想自动合并结果是

//Branch 2
//index.js
alert('A');
alert('B');
alert('C');
alert('Z');

无论如何,这是可以实现的吗?

您的图表令人困惑,并且它们不能正确地表达您试图表达的观点。您的基本问题是,能否在两个功能分支中保留所有提交,以便它们出现在创建它们的
master
分支中。Git有一个实现这一点的工具,它被称为
Git rebase
。考虑下面的场景:

master:  A -- B -- C
branch1: A -- B -- D
branch2: A -- B -- E
在本例中,
branch1
branch2
都是在提交
B
时从
master
分支出来的,并且都有一个额外的提交。以下命令将在
master
上重新设置
branch1
的基础,从而在保留所有提交的同时引入
master
的更改:

git checkout branch1
git rebase master
现在,图表将如下所示:

//Branch 1
//index.js
alert('A');
alert('B');
alert('Z');

//Branch 2
//index.js
alert('A');
alert('C');
alert('Z');
master:  A -- B -- C
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D'
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D' -- E'
branch1: A -- B -- C -- D'
branch2: A -- B -- C -- D' -- E'
现在可以使用
git push origin branch1:master
branch1
推送到
master
上,使图表如下所示:

//Branch 1
//index.js
alert('A');
alert('B');
alert('Z');

//Branch 2
//index.js
alert('A');
alert('C');
alert('Z');
master:  A -- B -- C
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D'
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D' -- E'
branch1: A -- B -- C -- D'
branch2: A -- B -- C -- D' -- E'
也可以对
branch2
进行重定基,这将使图表看起来像这样:

//Branch 1
//index.js
alert('A');
alert('B');
alert('Z');

//Branch 2
//index.js
alert('A');
alert('C');
alert('Z');
master:  A -- B -- C
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D'
branch1: A -- B -- C -- D'
branch2: A -- B -- E
master:  A -- B -- C -- D' -- E'
branch1: A -- B -- C -- D'
branch2: A -- B -- C -- D' -- E'

现在,您的
master
分支拥有来自两个分支的所有提交。

不确定是谁投了反对票,但我试图在您的反馈中让问题更清楚一点。我感觉很糟糕,因为我认为你对另一个问题给出了一个很好的答案,但这并不是我真正想要的。我相信你可能已经在
git合并后得到了这个答案,尽管它也可能有冲突(文件中有冲突标记)。关于在
alert('C')
之前显示的
alert('B')
的字母顺序,我认为这是不可能的。假设您确实遇到了合并冲突,那么您是否有理由不手动解决冲突?我只是想简化流程。对于我正在做的工作,有很多小的改动需要修复。我想git可能会有一个标签来包含两个文件之间的差异。也许我在这里回答了我自己的问题,但是一个可能的解决方案是使用Gitt这样的git包装器(用于npm),当我得到差异时,签出到一个新的分支,运行我自己的脚本来合并文件,然后扔掉冲突的分支为什么需要创建一个新分支?有一种方法可以告诉Git使用一个分支或另一个分支的版本自动完成文件的合并。但是在你的例子中,你想使用来自两个分支的信息,并且你想自动完成。我想这基本上就是问题所在