在Git中将一个变更合并到多个分支中

43

我习惯于只有一个主分支(master)并在话题分支上工作。但我现在正在一个有两个主分支(master和experimental)的项目上工作,不确定如何将我的话题分支合并到两个主分支中最好的方式是什么?

这是正确的方法吗?如果不是,请告诉我正确的方法。

(master)$ git checkout -b bugfix
# do bug fix here
(bugfix)$ git commit -a -m 'Fixed bug.'
(bugfix)$ git checkout master
(master)$ git merge bugfix

(master)$ git checkout bugfix
(bugfix)$ git rebase experimental
(bugfix)$ git checkout experimental
(experimental)$ git merge bugfix

谢谢。

1个回答

56

不要执行rebase操作,直接将你的bugfix分支合并到需要它的每个分支即可。

(master)$ git checkout -b bugfix
# do bug fix here
(bugfix)$ git commit -a -m 'Fixed bug.'
(bugfix)$ git checkout master
(master)$ git merge bugfix

(bugfix)$ git checkout experimental
(experimental)$ git merge bugfix

在进行变基时,您正在创建一个类似于已经合并的提交但不同的提交。进行变基后进行checkout+merge实际上相当于挑选修复bug的提交。


8
不确定这种方法是否一直有效。如果你的错误修复分支与实验分支差异很大,那么就会出现冲突,并且合并会显示比实际要合并的文件更多的文件。如果不同步源分支和目标分支,怎样才能始终使此方法有效? - endless
假设主分支和实验分支除了在 bugfix 中修改的文件外完全不同。由于 bugfix 是从主分支检出的,因此可以安全地合并到主分支中。但是实验分支呢? - Kingname
@Kingname,experimental和master有共同的祖先吗?如果是这样,请从该祖先提交(即两个分支的合并基础)创建bugfix分支。如果没有,则将修复内容cherry-pick或rebase到另一个分支。 - knittl
是的,它们有一个共同的祖先,一年前。之后,每个分支都有自己的一千多个注释。因此,除了一些实用文件外,其他文件完全不同。现在,我修改了一个公共文件中的一个实用函数。 - Kingname
1
@Kingname 如果是这样,由于分支高度分歧,我建议只需在每个分支上提交一次修复。当然,您可以使用git cherry-pick将提交的补丁文本复制到另一个分支。 - knittl
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接