将基于另一个分支构建的分支使用git rebase命令合并到主分支上

4

我正在处理一个代码库的功能。我创建了一个特性分支(例如branch_1),并在其之上创建了另一个分支(例如branch_2)。我过去经常会在每次更新branch_1时将branch_2进行变基,但现在branch_1被合并到了master中,因此我想将branch_2变基到master,这样branch_2就只包含它自己的变更了。我该如何做?这是正确的方法还是还有其他方法?


为什么不将branch_2合并到branch_1,然后再将branch_1合并到master呢?分支一直向前发展,所以这是可以做到的。此外,从branch_2合并实际上是在branch_1上进行的“提交”;无论如何都希望将其合并到master - cst1992
3个回答

4
您可以将此分支在主分支上进行rebase操作:
src/myproject (branch2)$ git rebase master

任何已经在主分支中的更改都将被“合并”到这些主分支更改中,您将只保留此分支包含的独特更改。

这可能不会很顺利,因为现在master有一个来自branch_1的单个合并提交,而branch_2有一系列与该合并提交在功能上相似的提交。 在master上进行变基将意味着引入该合并提交,然后在变基后重新播放相同的提交更改。 这绝对不是OP想要的历史记录。 - Tim Biegeleisen

2
不对特性分支进行变基而是与上游合并是非常方便的。然而,这有点假设你只交付了分支的压缩内容而不是合并的内容(因为谁想要所有那些在主干上的合并呢?)。
在大型系统中,保留这种升级历史记录在开发分支中可能非常好,因为升级可能会给你的特性引入新问题。虽然问题当然是相同的,但对特性分支进行变基可能会隐藏引入问题的原因。
比如说你有分支masterfeat1基于masterfeat2基于feat1
要将feat2升级到一个新的feat1,可以执行以下操作:
git fetch
git checkout origin/feat2
git merge origin/feat1
git push origin feat2

feat1 升级到新的 master 的步骤为:
git fetch
git checkout origin/feat1
git merge origin/master
git push origin feat1

但是假设你想将上游分支切换到 feat2 ,因为 feat1 已经被提交到了 master 分支。没问题。

git fetch
git checkout origin/feat2
git merge origin/master
git push origin feat2

1

您的请求有几种可能的解决方案。如果您对Mureinik的答案不满意,可以尝试使用git cherry-pick重新构建您的分支。基本上,从master创建一个新分支,并从branch_1合并到master的位置选择所有提交,一直到branch_2HEAD提交。为此,您将需要使用类似以下命令的命令(假设您在新分支上):

git cherry-pick branch_2~10 branch_2

假设在将 branch_1 合并后,branch_2 中有 10 次提交。未指定“提交回退”数量的 branch_2 是该分支的最新提交。请注意保留 HTML 标签。

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