当我阅读问题时,分支结构如下所示:
D (Main)
--C (Dev)
----A (Developer1)
----B (Developer2)
--?Bugs
快速术语(所以我可以使用简短的符号):
- FI = 正向集成(从父分支到子分支)
- RI = 反向集成(从子分支到其父分支)
- 分支 C 是分支 A 和分支 B的父级。A 和 B 是C的子级。
从最初的问题来看,听起来存在以下状态:
- A 和 B 都具有尚未 RI 到 C 的更改。
- 您恢复了以前在 C、B 和 A 中的合并尝试。
- (?)您在每个分支中提交了回滚(使用 tf.exe 回滚...),因此当您从每个分支“获取最新”时,您将拥有您的工作版本而不是失败的合并版本。
这是我的建议:
- 回滚到 A、B 和 C 的稳定版本(如果您还没有的话)。
- C->A,测试,A->C,验证OK。
- C->B,测试,B->C,验证OK。
细节:
- tf 回滚到 A、B 和 C 的工作版本(如果您还没有这样做)
FI 从 C->A(C 到 A)
- 解决你能解决的所有冲突
为待处理的合并 创建一个搁置集
- 现在在 A 中测试,
直到您确信合并成功并且您已经让所有 C 与所有 A 一起工作。
- 将合并更改提交给 A。
RI 从 A 到 C,
- 重复步骤 2 和 3,从 C->B,然后 B->C
提示: “A”可以是具有最简单或最重要更改的开发人员分支。
* 如果您决定不提交更改以回滚到您之前的“稳定”版本,那么您可能需要使用版本类型选项...但是如果所有三个分支都有需要回滚的更改,那么您至少需要回滚 c,然后合并以前版本的 A。我个人更喜欢从所有 3 个分支开始,它们的最新版本是您要继续使用的工作版本。(合并已经足够棘手,无需合并到特定的变更集)。
您描述的场景很常见,但不是最佳的。如果 A 和 B 都经常与 C 进行合并(在每次进行 FI 和测试之后),那么您的合并任务将会小得多。
向前进
我的一些建议可能会减少您未来的合并痛苦。
- 对于日常工作,开发人员可以将TFS 搁置集用于待处理的更改,然后直接检查到公共开发分支。仅当您需要隔离时才需要完整分支(例如同时处理冲突更改或多个开发人员处理重大更改)
- 仅当您需要与其他开发人员更改隔离时,才从公共开发人员分支创建子分支。例如,如果您正在实施需要两个开发人员共同处理的重大更改,您可以创建一个“功能”分支,一个或两个开发人员可以在不破坏开发人员分支稳定性的情况下处理该功能,然后尽快合并回 Dev 分支功能稳定。
- FI 经常从父级合并到子级!否则合并变得非常难以协调。
对于团队的规模,您可能有太多的分支(除非您有不应并排存在的并行功能)。理智会随着您远离 Main 的分支数量而降低。我会让所有开发人员从单个 Dev 分支 (C) 中工作,然后仅在需要时创建一个短暂的功能分支(然后在功能足够稳定以合并到 Dev 分支时关闭分支。
TFS 分支指南是一个很好的资源,提供漂亮的分支模式图片和许多指导,包括可能更好地满足您未来需求的不同模式。
享受!-泽潘