我遇到了以下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的回滚不会像通常的变更集一样对待。
答案 0 :(得分:7)
首先,很好地解释了问题:)。您需要开始使用的选项是“
回滚/ keepmergehistory
以下示例说明了我们在执行回滚时可以使用的两个不同选项,以及您获得上述特定行为的原因。我重新创建了上面提到的整个场景,但是我使用
从命令提示符回滚/ keepmergehistory
这次当我尝试从dev分支合并回Main分支时,它确实将回滚更改(CS6)带回源/主分支。
来自MSDN的说明:
当您回滚包含分支或合并更改的变更集时,通常希望将来在同一源和同一目标之间进行合并以包含这些更改。但是,如果希望将来在同一源和同一目标之间进行合并,则可以使用/ keepmergehistory选项来排除过去合并操作中包含的变更集。
例如,您可以在以下情况下使用此命令:
在2009年6月30日,您执行所有项目的完全合并 $ / BranchA /到$ / BranchB /:
C:\工作区>合并$ / BranchA $ / BranchB
您将此合并作为变更集292的一部分签入。
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,你应该输入 以下命令:
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上。