使用git合并多个分支

34
我有两个本地分支,名为“develop”和“master”,它们很相似。在我们公司的服务器上有一个“main”仓库(生产环境),还有其他开发人员创建的几个分支:
$ git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/some-test
  remotes/origin/feature1
  remotes/origin/feature2
  remotes/origin/master
如何将remotes/origin/feature1remotes/origin/feature2合并到我的本地"master"分支中,将其全部复制到"develop",然后开始在"develop"分支中使用实际代码?
2个回答

53
  1. git checkout master
  2. git pull origin feature1 feature2
  3. git checkout develop
  4. git pull . master (或者也可以使用 git rebase ./master)

第一条命令将当前分支切换到master分支。

第二条命令从远程的feature1feature2分支拉取更改。这是一个“章鱼合并”,因为它合并了多个分支。如果您喜欢,也可以进行两个正常的合并。

第三条命令将您切换回develop分支。

第四条命令将本地master分支的更改拉取到develop分支。

希望这有所帮助。

注意,编辑:请注意,git pull会自动执行fetch,因此您无需手动执行。这与git fetch后跟git merge几乎等效。


2
这种方法和仅使用两个合并的方法有什么不同?您是否会得到一个具有所有三个分支作为父级的单个合并提交?此外,如果合并不干净,这将可能失败,对吗?因此,可能仍需要执行 git merge feature1 feature2 - naught101
回答自己的问题,每个分支的头部作为父提交(包括正在合并的分支)会得到一个单独的提交。如果其中一个或多个单独合并是快进合并,则不会将被合并的分支的头部作为父提交,因为它已经在一个分支的历史记录中了。 - naught101
20
如果发生冲突,合并将会失败并显示信息Should not be doing an Octopus.。这显然是有史以来最好的错误信息之一。 - naught101
第四个命令可以替换为 git merge master 吗?我想确保我理解了 git pullgit merge 之间的区别。 - Web User

13

我只会“获取”所有的源代码:

git fetch origin

现在它已经在你的仓库中,你可以将这些分支合并到主分支中:

git checkout master

git merge origin/feature1 

git merge origin/feature2 

现在你可以将主分支(master)合并到开发分支(develop)中了。

git checkout develop
git merge master 

如果您打算提交回原始版本库,那么我建议您设置一个本地跟踪分支,这样您就可以在本地访问并直接推送到原始版本库:

git branch --track origin/feature1 feature1

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