将分支的分支合并到master中而不合并中间分支

时间:2015-11-24 12:19:30

标签: git version-control merge

问题的简短版本

给出以下分支结构:

   *----*-----*
master         \
                *--*---*------*-*---*
                A                    \
                                      *----*
                                    hotfix

是否可以将hotfix中所做的更改仅合并到master 中,而无需引入任何更改在Feature A

Feature A的开发过程中,file_1已更改。在hotfix期间,file_1和file_2已更改。

我希望将hotfix中引入的逐行更改合并到master中。我不想要的是hotfix中覆盖master中文件的确切文件,因为它会包含Feature A更改。

背景故事

我正在开发我们的开发服务器。我有一个主分支,它(几乎)是实时服务器的精确副本。当我想实现新功能时,我创建了一个主分支,进行更改并上传到开发服务器。一旦我对更改感到满意,我就将它们合并到master中并将更改推送到实时服务器。

我一直在研究Feature A,这需要很长时间才能实现并影响许多文件。在完成Feature A之前,我想要处理hotfix。我可以签出master并从那里为我的修补程序分支,但是开发服务器上的所有文件当前都包含Feature A的代码。在Feature A工作期间,我不希望hotfix停止开发dev。所以我已经分了Feature A

我现在已经完成了hotfix,我希望将其合并为主人。但是,我不希望任何 Feature A代码进入master

如果没有合并冲突,这可能吗?

2 个答案:

答案 0 :(得分:1)

git rebase --onto master A hotfix。 这将修改修补程序中的提交,但不会将分支A中的提交重新绑定到主分支的提示上。之后,您可以像往常一样将它们合并到主分支中。

答案 1 :(得分:1)

由于分支实际上只是命名提交,因此您的历史记录实际上如下所示:(最新提交)

* 9999 [hotfix]
|
* 8888
|
* 7777
|
* 6666 [A]
|
* 5555
|
* 4444
|
* 3333 [master]
|
* 2222
|
V
$ git checkout hotfix

首先,我们保存指向原始hotfix的指针,然后将其命名为A-hotfix

$ git branch A-hotfix

现在,将所有提交从A提交到hotfix,然后将其重播到master点的提交中:

$ git rebase --onto master A hotfix