【问题标题】:Git merge auto-add all new linesGit合并自动添加所有新行
【发布时间】:2016-05-05 21:25:00
【问题描述】:

//为清晰而编辑

有什么方法可以实际或理论上合并两个提交并在它们之间保留所有不同的内容。

假设您有一个主分支,其中包含一个名为 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');

将分支 1 合并到分支 2 的理想自动合并结果是

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

有没有办法做到这一点?

【问题讨论】:

  • 我相信你可能git merge 之后已经结束了这个,尽管它也可能有冲突(文件有冲突标记)。关于alert('B')alert('C') 之前显示的字母顺序,我认为这是不可能的。假设您确实遇到了合并冲突,有什么理由通常您不会手动解决它?
  • 我只是想简化流程。对于我正在做的工作,它是针对许多小更改的许多修复。我想也许 git 会有一个标签来包含两个文件之间的差异。
  • 也许我在这里回答我自己的问题,但可能的解决方案是使用 gitty 之类的 git 包装器(用于 npm),当我得到差异时,结帐到新分支,运行我自己的脚本来合并文件,然后扔掉冲突的分支
  • 为什么需要创建一个新分支?有一种方法可以告诉 Git 使用来自一个分支或另一个分支的版本自动完成文件的合并。但是在您的情况下,您希望使用来自两个分支的信息,并且希望自动完成。
  • 我想这就是问题所在

标签: git merge git-merge


【解决方案1】:

您的图表令人困惑,而且它们并没有达到您想要表达的观点。您的基本问题是您能否保留两个功能分支中的所有提交,以便它们出现在创建它们的 master 分支中。 Git 有一个工具可以做到这一点,它被称为git rebase。考虑以下场景:

master:  A -- B -- C
branch1: A -- B -- D
branch2: A -- B -- E

在这个例子中,branch1branch2 在提交 B 时从 master 分支出来,并且从那时起都有一个额外的提交。以下命令将 rebase branch1 on master,从而在保留所有提交的同时引入来自 master 的更改:

git checkout branch1
git rebase master

现在图表将如下所示:

master:  A -- B -- C
branch1: A -- B -- C -- D'
branch2: A -- B -- E

现在可以使用git push origin branch1:masterbranch1 推送到master,使图表看起来像这样:

master:  A -- B -- C -- D'
branch1: A -- B -- C -- D'
branch2: A -- B -- E

也可以对branch2 进行变基,这将使图表看起来像这样:

master:  A -- B -- C -- D' -- E'
branch1: A -- B -- C -- D'
branch2: A -- B -- C -- D' -- E'

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

【讨论】:

  • 不确定谁投了反对票,但我试图根据您的反馈让问题更清楚一点。我感觉很糟糕,因为我认为您对另一个问题给出了很好的答案,但这并不是我真正想要的
猜你喜欢
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2016-07-14
  • 2012-09-24
  • 2015-03-15
  • 1970-01-01
相关资源
最近更新 更多