Git:仅合并特定于分支的提交

Git: Merging only branch specific commits

以我监控 Git 存储库和分支的方式为您提供背景知识;

我一直在监视从每个 sprint 开始的两个分支——release 和 master。 Master 分支是开发人员创建新分支(特定于任务)、实施更改并创建合并到 Master 中的拉取请求的地方。 Release 分支是特定于 sprint 的,始终可以提交给生产。我们只将提交给 Master 并由 QA 验证的分支合并到 Release 分支中。说得通?当您想要定期提交版本并实现和验证特定功能时,这种方法最有效,因此您完全知道下一个版本中会发生什么。

一切顺利,直到我 运行 进入以下问题;

  1. DeveloperA 已从 Master.
  2. 创建了特定于任务的分支 taskA
  3. 他多次提交 taskA 分支。
  4. 同时其他开发人员 B 从 Master 创建了他的分支 taskB 并提交了对 taskB 的多项更改并将 taskB 合并到 Master.
  5. DeveloperA将合并Master到taskA分支继续他的任务!
  6. 最终他会把taskA分支合并到Master中

现在我只想将 taskA 分支合并到 Release 分支,但是由于 taskB 也被合并到 taskA 分支中,所以我将 taskB 分支自动更改为 Release 分支!我不想要那个。我知道我可以从 taskA 中挑选所有提交,这变得很烦人。

无论开发人员是否间歇性地合并 Master,谁能帮我只让 taskA 分支更改为 Release 的最佳方法是什么。我是不是遵循了错误的 Git 做法?

在我看来,taskA 分支的开发人员(我们称他为开发人员 A)应该 rebase 在创建拉取请求(或合并它)之前,他的最新版本的分支。开发人员 A 应该 运行 在合并或创建拉取请求之前执行此命令:

git rebase -i origin/Release

这将为他提供一个编辑器,他可以在其中设置他想要"pick"/使用的提交以应用于他的分支。如果 taskB 分支的任何提交在他的分支中结束,他可以删除 taskB 的提交,如果它们还没有准备好发布(只需删除包含这些提交的行)。

这样,在此期间在 Release 分支中发生的所有更改都将被提取并应用到他的 taskA 分支。然后,开发人员 A 在编辑器中选择的所有提交将再次应用在其之上。这样的话,时间线还是对的,应该不会有任何冲突。