Git:仅合并特定于分支的提交
Git: Merging only branch specific commits
以我监控 Git
存储库和分支的方式为您提供背景知识;
我一直在监视从每个 sprint 开始的两个分支——release 和 master。 Master
分支是开发人员创建新分支(特定于任务)、实施更改并创建合并到 Master
中的拉取请求的地方。 Release
分支是特定于 sprint 的,始终可以提交给生产。我们只将提交给 Master 并由 QA 验证的分支合并到 Release 分支中。说得通?当您想要定期提交版本并实现和验证特定功能时,这种方法最有效,因此您完全知道下一个版本中会发生什么。
一切顺利,直到我 运行 进入以下问题;
- DeveloperA 已从
Master
. 创建了特定于任务的分支 taskA
- 他多次提交
taskA
分支。
- 同时其他开发人员 B 从 Master 创建了他的分支
taskB
并提交了对 taskB 的多项更改并将 taskB 合并到 Master
.
- DeveloperA将合并Master到
taskA
分支继续他的任务!
- 最终他会把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 在编辑器中选择的所有提交将再次应用在其之上。这样的话,时间线还是对的,应该不会有任何冲突。
以我监控 Git
存储库和分支的方式为您提供背景知识;
我一直在监视从每个 sprint 开始的两个分支——release 和 master。 Master
分支是开发人员创建新分支(特定于任务)、实施更改并创建合并到 Master
中的拉取请求的地方。 Release
分支是特定于 sprint 的,始终可以提交给生产。我们只将提交给 Master 并由 QA 验证的分支合并到 Release 分支中。说得通?当您想要定期提交版本并实现和验证特定功能时,这种方法最有效,因此您完全知道下一个版本中会发生什么。
一切顺利,直到我 运行 进入以下问题;
- DeveloperA 已从
Master
. 创建了特定于任务的分支 - 他多次提交
taskA
分支。 - 同时其他开发人员 B 从 Master 创建了他的分支
taskB
并提交了对 taskB 的多项更改并将 taskB 合并到Master
. - DeveloperA将合并Master到
taskA
分支继续他的任务! - 最终他会把taskA分支合并到Master中
taskA
现在我只想将 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 在编辑器中选择的所有提交将再次应用在其之上。这样的话,时间线还是对的,应该不会有任何冲突。