TFS合并不会获取回滚变更集

时间:2015-07-23 07:48:55

标签: tfs merge rollback

我遇到了以下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的回滚不会像通常的变更集一样对待。

1 个答案:

答案 0 :(得分:7)

首先,很好地解释了问题:)。您需要开始使用的选项是“

  

回滚/ keepmergehistory

以下示例说明了我们在执行回滚时可以使用的两个不同选项,以及您获得上述特定行为的原因。我重新创建了上面提到的整个场景,但是我使用

从命令提示符回滚
  

/ keepmergehistory

这次当我尝试从dev分支合并回Main分支时,它确实将回滚更改(CS6)带回源/主分支。

来自MSDN的说明:

当您回滚包含分支或合并更改的变更集时,通常希望将来在同一源和同一目标之间进行合并以包含这些更改。但是,如果希望将来在同一源和同一目标之间进行合并,则可以使用/ keepmergehistory选项来排除过去合并操作中包含的变更集。

例如,您可以在以下情况下使用此命令:

  • 在2009年6月30日,您执行所有项目的完全合并 $ / BranchA /到$ / BranchB /:

    C:\工作区>合并$ / BranchA $ / BranchB

您将此合并作为变更集292的一部分签入。

  • 7月份,您进行了多次更改$ / BranchA / Util.cs。这些变化 包含在变更集297,301和305中。
  • 2009年8月1日,您将$ / BranchA / Util.cs合并到$ / BranchB / Util.cs:

    C:\工作区>合并$ / BranchA / Util.cs $ / BranchB / Util.cs

您将更改作为变更集314的一部分签入。此操作的结果是您在变更集297,301和305中对$ / BranchA / Util.cs所做的编辑现在也应用于$ / BranchB /Util.cs。

  • 一周后,您意识到您所做的编辑 7月的$ / BranchA / Util.cs不适合$ / BranchB / Util.cs。 您可以使用rollback命令来否定这些更改。当你 使用rollback命令回滚合并更改或分支 改变,你有决定。
  • 如果您希望在7月份对$ / BranchA / Util.cs进行更改 在将来的合并中重新应用于$ / BranchB / Util.cs,你应该输入 以下命令:

    C:\工作区> tf rollback / changeset:314

  • 如果您希望在7月份对$ / BranchA / Util.cs进行更改 永远不要在以后的合并中重新应用于$ / BranchB / Util.cs,你应该这样做 输入以下命令:

  • C:\工作区> tf rollback / changeset:314 / keepmergehistory

  • 几周后,您将$ / BranchA /合并到$ / BranchB /中: C:\工作区>合并$ / BranchA $ / BranchB

  • 如果省略了/ keepmergehistory选项,则合并更改将会 适用于$ / BranchB / Util.cs应用的所有变更集 $ / BranchA / Util.cs,因为变更集292,包括变更集297,301,

  • 换句话说,将来的合并将撤消回滚更改。

  • 如果包含/ keepmergehistory选项,则合并操作 将应用于$ / BranchB / Util.cs所有应用的变更集 $ / BranchA / Util.cs自变更集292起,不包括变更集297,301, 换句话说,未来的合并不会撤消回滚 更改。因此,BranchA上的内容可能与内容不匹配 在BranchB上。

MSDN SOURCE