TFS 合并不获取回滚变更集
TFS merge doesn't pick up rollback changeset(s)
我遇到了以下 TFS 问题:
我已经从 MAIN 分支创建了新分支。在此期间,新分支上发生了一些变更集(让我们指定它们从 CS-1 到 CS-2)。
一会儿我对 MAIN 分支进行了修改,并且此修改已合并到新分支(分支上的新变更集:CS-3)。
在那之后,新分支有几个变化(产生了从 CS-4 到 CS-5 的变更集)。另外,我回滚了 CS-3,结果在新分支上创建了新的变更集 CS-6。
现在,问题是:
从新分支到 MAIN 的合并应该包含哪些变更集?
从逻辑上讲,它应该是:[CS-1 – CS-2、CS-4 – CS-5 和 CS-6]。
但是,真正的结果是:[CS-1 – CS-2, CS-4 – CS-5]
有没有人知道:为什么回滚变更集 (CS-6) 不包含在合并中?
很明显,CS-6 变更集的回滚并没有像通常的变更集那样被平等对待。
首先,很好解释的问题:)。您需要开始使用的选项是“
tf rollback /keepmergehistory
以下示例解释了我们在执行回滚时可以使用的 2 个不同选项,以及为什么会出现上述特定行为。我重新创建了您上面提到的整个场景,但我使用
从命令提示符回滚
/keepmergehistory
这次当我尝试从 dev 分支合并回 Main 分支时,它确实将回滚更改 (CS6) 带回了 source/main 分支。
来自 MSDN 的解释:
当您回滚包含分支或合并更改的变更集时,您通常希望将来在同一源和同一目标之间进行合并以包含这些更改。但是,如果您希望将来在同一源和同一目标之间进行合并以排除过去合并操作中包含的变更集,则可以使用 /keepmergehistory 选项。
例如,您可以在以下情况下使用此命令:
在 2009 年 6 月 30 日,您对来自
$/BranchA/ 到 $/BranchB/:
c:\workspace> tf 合并 $/BranchA $/BranchB
您签入此合并作为变更集 292 的一部分。
在 7 月,您进行了多项更改 $/BranchA/Util.cs。这些变化
包含在变更集 297、301 和 305 中。
2009 年 8 月 1 日,您将 $/BranchA/Util.cs 合并到 $/BranchB/Util.cs:
c:\workspace> tf merge $/BranchA/Util.cs $/BranchB/Util.cs
您将更改作为变更集 314 的一部分签入。此操作的结果是您在变更集 297、301 和 305 中对 $/BranchA/Util.cs 所做的编辑现在也应用于$/BranchB/Util.cs.
一周后,您意识到您对
7 月的 $/BranchA/Util.cs 不适合 $/BranchB/Util.cs。
您可以使用回滚命令来取消这些更改。当你
使用回滚命令回滚合并更改或分支
改变,你要做出决定。
如果您希望在 7 月对 $/BranchA/Util.cs 所做的更改
在将来的合并中重新应用于 $/BranchB/Util.cs,您应该键入
以下命令:
c:\workspace> tf rollback /changeset:314
如果您希望在 7 月对 $/BranchA/Util.cs 所做的更改
永远不要在以后的合并中重新应用于 $/BranchB/Util.cs,你应该
输入以下命令:
c:\workspace> tf rollback /changeset:314 /keepmergehistory
几周后,您将 $/BranchA/ 合并到 $/BranchB/:
c:\workspace> tf 合并 $/BranchA $/BranchB
如果省略 /keepmergehistory 选项,合并更改将
应用于 $/BranchB/Util.cs 所有应用于的变更集
$/BranchA/Util.cs 从变更集 292 开始,包括变更集 297、301,
换句话说,未来的合并将撤消回滚更改。
如果包含 /keepmergehistory 选项,合并操作
将应用于 $/BranchB/Util.cs 所有应用于的变更集
$/BranchA/Util.cs 从变更集 292 开始,不包括变更集 297、301、
和305。换句话说,未来的合并不会撤消回滚
改变。因此,BranchA 上的内容可能与内容不匹配
在 BranchB。
我遇到了以下 TFS 问题:
我已经从 MAIN 分支创建了新分支。在此期间,新分支上发生了一些变更集(让我们指定它们从 CS-1 到 CS-2)。 一会儿我对 MAIN 分支进行了修改,并且此修改已合并到新分支(分支上的新变更集:CS-3)。
在那之后,新分支有几个变化(产生了从 CS-4 到 CS-5 的变更集)。另外,我回滚了 CS-3,结果在新分支上创建了新的变更集 CS-6。
现在,问题是: 从新分支到 MAIN 的合并应该包含哪些变更集? 从逻辑上讲,它应该是:[CS-1 – CS-2、CS-4 – CS-5 和 CS-6]。 但是,真正的结果是:[CS-1 – CS-2, CS-4 – CS-5]
有没有人知道:为什么回滚变更集 (CS-6) 不包含在合并中? 很明显,CS-6 变更集的回滚并没有像通常的变更集那样被平等对待。
首先,很好解释的问题:)。您需要开始使用的选项是“
tf rollback /keepmergehistory
以下示例解释了我们在执行回滚时可以使用的 2 个不同选项,以及为什么会出现上述特定行为。我重新创建了您上面提到的整个场景,但我使用
从命令提示符回滚/keepmergehistory
这次当我尝试从 dev 分支合并回 Main 分支时,它确实将回滚更改 (CS6) 带回了 source/main 分支。
来自 MSDN 的解释:
当您回滚包含分支或合并更改的变更集时,您通常希望将来在同一源和同一目标之间进行合并以包含这些更改。但是,如果您希望将来在同一源和同一目标之间进行合并以排除过去合并操作中包含的变更集,则可以使用 /keepmergehistory 选项。
例如,您可以在以下情况下使用此命令:
在 2009 年 6 月 30 日,您对来自 $/BranchA/ 到 $/BranchB/:
c:\workspace> tf 合并 $/BranchA $/BranchB
您签入此合并作为变更集 292 的一部分。
在 7 月,您进行了多项更改 $/BranchA/Util.cs。这些变化 包含在变更集 297、301 和 305 中。
2009 年 8 月 1 日,您将 $/BranchA/Util.cs 合并到 $/BranchB/Util.cs:
c:\workspace> tf merge $/BranchA/Util.cs $/BranchB/Util.cs
您将更改作为变更集 314 的一部分签入。此操作的结果是您在变更集 297、301 和 305 中对 $/BranchA/Util.cs 所做的编辑现在也应用于$/BranchB/Util.cs.
一周后,您意识到您对 7 月的 $/BranchA/Util.cs 不适合 $/BranchB/Util.cs。 您可以使用回滚命令来取消这些更改。当你 使用回滚命令回滚合并更改或分支 改变,你要做出决定。
如果您希望在 7 月对 $/BranchA/Util.cs 所做的更改 在将来的合并中重新应用于 $/BranchB/Util.cs,您应该键入 以下命令:
c:\workspace> tf rollback /changeset:314
如果您希望在 7 月对 $/BranchA/Util.cs 所做的更改 永远不要在以后的合并中重新应用于 $/BranchB/Util.cs,你应该 输入以下命令:
c:\workspace> tf rollback /changeset:314 /keepmergehistory
几周后,您将 $/BranchA/ 合并到 $/BranchB/: c:\workspace> tf 合并 $/BranchA $/BranchB
如果省略 /keepmergehistory 选项,合并更改将 应用于 $/BranchB/Util.cs 所有应用于的变更集 $/BranchA/Util.cs 从变更集 292 开始,包括变更集 297、301,
换句话说,未来的合并将撤消回滚更改。
如果包含 /keepmergehistory 选项,合并操作 将应用于 $/BranchB/Util.cs 所有应用于的变更集 $/BranchA/Util.cs 从变更集 292 开始,不包括变更集 297、301、 和305。换句话说,未来的合并不会撤消回滚 改变。因此,BranchA 上的内容可能与内容不匹配 在 BranchB。