Git 针对修补程序和补丁等内容针对发布分支进行变基

Git rebase against a release branch for things like hotfixes and patches

在工作中,我们使用 develop 分支进行日常工作 - 新功能、错误修复等。当我们准备发布时,我们将 devleop 分支合并到 master、tag 和 release。

如果我们需要做一个需要立即发布的修补程序,我们会在 master 之外创建一个分支,应用更改,并相应地合并(包括将 master 合并回 develop).到目前为止,我所描述的内容没有任何问题。

我最近刚刚在处理一个将包含在下一个版本中的小错误修复。所以创建了我常用的 develop 分支,做了一些提交,并提交了一个 PR。然后一位经理希望在今天将修复程序作为修补程序。好的 - 很简单,我将根据 master 重新调整我的工作并打开针对 master 的 PR。但是,运行 git rebase master 没有根据当前 HEAD 提交重放我的工作。相反,git 告诉我一切都是 "up to date"。然后我打开了针对 master 的 PR,我的 PR 包含 所有来自 develop 分支的新工作,而不仅仅是我的错误修复。

我能够进行交互式变基并删除所有不应该存在的提交,但这似乎有点乏味且容易出错。有没有更明智的方法来实现 对较旧但最新的分支进行变基 的目标?

而不是变基 "against master"(即 "with master as the upstream" 根据您使用的命令),您需要变基您的工作 --onto master 并将上游设置为 develop

git rebase --onto master develop my_fix

请记住,这会创建一个新的未经测试的代码状态;由于热修复可以快速跟踪到生产环境,因此需要特别注意测试。