我有以下分支。
分支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分支中合并任何内容。
答案 0 :(得分:1)
假设所有分支的提交历史如下:
mixedCase
通常有两种方法可以将更改从...---A---...---G branchA, branchD
\
B---C---D---M branchB
\ /
E---F branchC
合并到branchC
。
由于您已将branchD
合并到branchC
中,因此可以将branchB
合并到branchB
中,然后对branchD
所做的更改将应用于{ {1}}:
branchC
那么提交历史将是:
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
中,并且不会有合并冲突。