如何将多个分支合并到主分支(master)?

63
        C---D  =>b1
      /    
     /  E---F  =>b2
     | /   
  A--B =======> master
     | \
     \  G---H  =>b3
      \ 
       I---J   =>b4

我想将b1b2b3b4合并到master分支,是否可以一次性合并?

类似这样:

git checkout master
git merge b1 b2 b3 b4

1
为什么你不自己试一下呢?如果没有冲突的话,它是可以工作的。 - pktangyue
4
@android,既然已经有一个回答建议使用bash,另一个回答则声称这根本不可能,我认为你应该将那个评论改写成回答,因为它实际上是正确的,而迄今为止其他的回答都不正确。 - Kyle Strand
@KyleStrand 是的,既然没有人去研究这个话题,我终于决定自己去做了。 - Alexei Sholik
2个回答

68

merge 命令支持多种合并策略。其中有两种可以同时合并多个分支。

也可以参考这个问题,以获得每个策略的非正式描述。

octopus

这种策略用于解决有多个头的情况,但会拒绝需要手动解决的复杂合并。其主要用途是将主题分支头捆绑在一起。当拉取或合并多个分支时,这是默认的合并策略。

最后一句话意味着,如果你执行 git merge branch1 branch2 ...,它将使用octopus策略。

ours

这种策略可以解决任何数量的头,但合并后的树总是当前分支头的树,有效地忽略了所有其他分支的更改。它旨在用于取代旧的侧面分支开发历史。

参见这个问题,以获得一个用例示例。


3

Git有一个合并策略称为“章鱼合并”,可以合并多个分支,只要没有复杂的冲突。执行此操作的命令与您建议的git merge b1 b2完全相同。


4
这并不完全准确。章鱼合并策略可以合并任意数量的分支。 - Nevik Rehnel
正如所说,章鱼策略只有在没有复杂合并时才有效。如果存在任何冲突将会失败。而且仍然不能像要求的那样用一条命令完成。 - jbr
6
实际上,您可以使用一个命令合并多个分支。Git文档给出了以下示例:$git merge fixes enhancements - user456814
啊,这是真的。我一直以为修复和增强是合并在一起的。 - jbr

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