如何在TFS中解析部分合并的变更集?

时间:2016-09-09 23:47:20

标签: tfs

我在TFS中的一个项目在我已经合并并提交它们之后,一直在分支之间显示未更改的变更集。我使用了Track Changeset功能并单击了Visualize按钮以查看更改是否已合并。它显示它已合并但具有不同的背景颜色和星号。我检查了帮助,它给出了这样的解释:

  

如果分支已收到变更集中的某些(但不是全部)更改,则分支将填充模式,星号将跟随该分支中的变更集编号。例如,上图显示只有变更集38中的某些更改已合并到“测试”分支   Track Changes Help

我不明白我是如何仅部分合并这些变更集的。也许我在完成合并时没有最新版本,但它发生在很多变更集中,这只发生在这个分支项目文件夹中。

有没有办法找出未合并的内容并将其合并,以便更改集将退出显示为合并候选者?

1 个答案:

答案 0 :(得分:2)

仅将变更集中的某些更改合并到目标时,会记录部分合并。下面有两种常见的情况,您最终可以使用部分合并:

方案1:检查合并文件时撤消一些待处理的更改

在这种情况下,即使我们已将变更集 Dev 合并到 Main ,它仍然是合并候选者。这是因为合并引擎检测到该变更集中仍然存在一些未从Dev传播到Main的变更。

场景2:在功能级别执行合并而不是从分支顶部执行

例如:假设您有两个分支 Main Dev ,每个分支都有两个文件夹(Feature1和Feature2),每个功能文件夹包含一个文件。我们会从功能文件夹(Dev\Feature1\feature1.txtDev\Feature2\feature2.txt)中编辑这两个文件并签入更改。

如果在Feature1级别执行合并操作。( Changset142→  Changeset143 )您将在Pending Changes窗口中注意到只会合并在Feature1文件夹中完成的编辑。完成合并。

如果您查看Feature1文件夹的合并历史记录,您将看到来自变更集142的所有更改已合并到变更集143中。

但是,如果您查看Main的合并历史记录,您将看到只有变更集142的部分已合并到变更集143.这是正常的,因为变更集142有一些更改 - 在Feature2中编辑文件文件夹 - 未送达。

在部分合并的情况下,找出已合并的变更以及变更集中的哪些变更被遗漏了。实现此目的的唯一方法是 diff 部分合并的变更集的内容,以及作为合并结果生成的变更集的内容。有关详细信息,请参阅此博客:Partial Merges in TFS – A Guide

更新

  

你可以discard merge。   这必须从命令行完成。打开Developer command prompt,   然后导航到任一分支下的文件夹(即导航   对其中一个受影响   workspaces)。   然后输入:

tf merge /r /discard "$/Project/B1" "$/Project/B2" /v:C12345~C12345
     

这将识别变更集(在这种情况下,它是变更集   #12345),并将其更新为合并到目标分支(分支B2)。将检出目标文件,但不会更改它们 - 您   可以简单地检查它们以完成操作。在那之后   变更集将不再显示为合并候选人。你可以指定   一系列变更集同时合并,但它们应该是   连续的。

     

请注意,执行此操作后,有时仍会显示变更集   作为合并候选人 - 这与最新的相比并不常见   TFS的版本,几乎不可能修复(除非你是   运行您自己的本地安装的TFS,并希望得到你的手   在数据库中脏了)。如果你最终得到其中一个被marooned   变更集,只是忽略它。

     

来源:   Finding merge candidates in TFS