如何从一个git分支更改为另一个分支

时间:2018-07-26 10:36:12

标签: git github merge version-control

我有以下分支。

  

分支A:主分支或主分支。

     

分支B:从A创建。

     

分支C:从B创建。

     

分支D:从A创建

现在我对分支C进行了一些更改,现在我可以将它们合并到分支B。但是现在这时从分支A创建了一个新的分支D,现在我应该将所做的更改合并到分支D。我对分支D的更改?由于我有很多提交,因此我无法一一挑选。我试图在分支C上重新建立分支D的基础,但是我遇到了很多无法手动解决的冲突。那么将分支C合并到分支D的最佳方法是什么?

编辑1:

让我再澄清一下我的问题。在这里,分支A是主分支。分支B是发行分支(刚刚结束,因此该分支现在处于活动状态)。分支C是从B剪切的主题分支,分支D是从A剪切的新发行分支。理想情况下,我们应该仅将主题分支合并到发行分支,然后将这些更改选择到主分支(A)。因此,我们创建了一个然后从当前发行分支的主题分支进行更改,并提出合并请求。我们不应将任何内容添加到非活动的发行分支。现在,我正在处理分支C,该分支是从已变为非活动状态的发布分支B剪切而来的。现在,我应该从D创建一个分支,并在其中添加所有更改,并引发一个“合并请求”。我不想那样做。我想用我的分支C在分支D上引发一个合并请求,这不会有任何冲突。可能吗 ?

我的解决方法是:

我将从分支B中创建一个临时分支B_temp。壁球将我的主题分支C合并到B_temp。然后从D中创建一个新的分支E,从B_temp到分支E挑选提交,解决任何合并冲突(我可以解决这些冲突,因为它们仅是我的更改)。将对F的合并请求提高到分支D上。我想知道是否有任何更好的解决方案,而不是如果可以简单地使用旧分支C来创建新分支和挑选樱桃呢?

注意:未经适当的合并请求和批准,我们不允许在master和release分支中合并任何内容。

1 个答案:

答案 0 :(得分:1)

假设所有分支的提交历史如下:

mixedCase

通常有两种方法可以将更改从...---A---...---G branchA, branchD \ B---C---D---M branchB \ / E---F branchC 合并到branchC

选项1:将branchB合并为branchD

由于您已将branchD合并到branchC中,因此可以将branchB合并到branchB中,然后对branchD所做的更改将应用​​于{ {1}}:

branchC

那么提交历史将是:

branchD

选项2:将branchC重新设置为branchA,然后合并为branchD

或者您可以首先通过以下方式将git checkout branchD git merge branchB 改编为 branchA | ...---A---...---G-----H branchD \ / B---C---D---M branchB \ / E---F branchC

branchC

提交历史将为:

branchA

然后将重新设置的git rebase --onto branchA branchB branchC 合并到 E'---F' branchC / ...---A---...---G branchA, branchD \ B---C---D---M branchB \ / E---F 中:

branchC

提交历史将为:

branchD

  

我想使用我的分支C在分支D上引发合并请求   不会有任何冲突。有可能吗?

是的,有可能。 首先,请检查文件git checkout branchD git merge branchC branchA | ...---A---...---G---E'---F' branchC, branchD \ B---C---D---M branchB \ / E---F 中是否有通过以下方式更改过的文件:

branchC
  • 如果双方都没有文件更改,则创建合并请求以将branchD直接合并到git diff branchC branchD --name-only
  • 否则,使用branchD的文件版本覆盖branchC中的冲突文件版本:

    branchC

    然后创建一个合并请求,将branchD合并到git checkout branchC git checkout branchD -- filename git commit -m 'overwrite the filename by using the version from branchD' git push origin branchC 中,并且不会有合并冲突。