我在TFS中的一个项目在我已经合并并提交它们之后,一直在分支之间显示未更改的变更集。我使用了Track Changeset功能并单击了Visualize按钮以查看更改是否已合并。它显示它已合并但具有不同的背景颜色和星号。我检查了帮助,它给出了这样的解释:
如果分支已收到变更集中的某些(但不是全部)更改,则分支将填充模式,星号将跟随该分支中的变更集编号。例如,上图显示只有变更集38中的某些更改已合并到“测试”分支 Track Changes Help
我不明白我是如何仅部分合并这些变更集的。也许我在完成合并时没有最新版本,但它发生在很多变更集中,这只发生在这个分支项目文件夹中。
有没有办法找出未合并的内容并将其合并,以便更改集将退出显示为合并候选者?
答案 0 :(得分:2)
当仅将变更集中的某些更改合并到目标时,会记录部分合并。下面有两种常见的情况,您最终可以使用部分合并:
方案1:检查合并文件时撤消一些待处理的更改
在这种情况下,即使我们已将变更集 Dev 合并到 Main ,它仍然是合并候选者。这是因为合并引擎检测到该变更集中仍然存在一些未从Dev传播到Main的变更。
场景2:在功能级别执行合并而不是从分支顶部执行
例如:假设您有两个分支 Main 和 Dev ,每个分支都有两个文件夹(Feature1和Feature2),每个功能文件夹包含一个文件。我们会从功能文件夹(Dev\Feature1\feature1.txt
和Dev\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 变更集,只是忽略它。