如何在不合并先前分支的更改的情况下合并分支

Posted

技术标签:

【中文标题】如何在不合并先前分支的更改的情况下合并分支【英文标题】:How to merge a branch without also merging changes from previous branches 【发布时间】:2022-01-13 10:43:30 【问题描述】:

我是 git 的新手,对分支和合并这些分支有疑问。

假设在我的项目存储库中,我有 3 个“主要”分支:Alpha、Beta、Production。

这是我面临的一个场景:

我目前在本地机器上的 Alpha 分支上工作。我从 Alpha 创建了一个新分支,我们称之为feature/newFeature。创建功能后,我提交并推送更改,然后将feature/newFeature 合并到 Alpha 分支中以供 QA 测试。如果 QA 批准,则将其合并为 Beta,然后是 Production,等等。

现在,在 feature/newFeature 被合并到 Alpha(还没有任何其他分支)之后,我从 Alpha 创建了另一个分支,称为 fix/hotfix。在修复需要修复的内容后,我也将此分支合并到 Alpha 中。

但是(这就是我面临的问题),假设 fix/hotfix 已经过测试并且正在运行并且可以合并到 Beta 中,但 feature/newFeature 仍在 Alpha 上进行测试。如果我尝试将 fix/hotfix 分支合并到 Beta 中,它也会将来自 feature/newFeature 分支的更改合并到 Beta 中(我显然不想要,因为它仍在测试中)。

我理解为什么会发生这种情况,因为当我将 feature/newFeature 合并到 Alpha 中,然后在合并之后从 Alpha 创建 fix/hotfix 分支时,fix/hotfix 分支还包含来自 feature/newFeature 分支的更改。

我的问题是:有没有什么方法可以将fix/hotfix 分支合并到 Beta 中,而不会合并以前不应该合并的分支/更改?

【问题讨论】:

【参考方案1】:

您可以随时复制修复/修补程序分支并将其重新设置为 beta 版

git checkout fix/hotfix
git checkout -b fix/hotfix-copy
git rebase beta

这应该让您了解 beta 分支上的修补程序更改。然后只需合并修补程序

【讨论】:

Cherry-pick 会更简单,并且完成同样的事情(rebase 只是自动挑选樱桃,加上一些分支名称摆弄,这里我们真的不想要分支名称摆弄部分)。但其中任何一个都可以,是的。

以上是关于如何在不合并先前分支的更改的情况下合并分支的主要内容,如果未能解决你的问题,请参考以下文章

Git:如何避免在先前合并还原后合并功能分支时发生冲突

如何在没有实际合并的情况下测试合并

显示先前git合并中涉及的提交

如何在不实际合并的情况下测试合并

如何将错误修复分支合并到主分支?

GIT:如何在恢复合并后从分支中提取更改