我的代码有两个分支。让我们说B1
和B2
。代码更改在两个分支上并行发生,我们会定期合并(不是所有内容,只是必需的内容),从B1
到B2
。但是,通过将代码从一个分支复制粘贴到另一个分支,手动完成此合并(无论出于何种原因)。现在,我想确保将所有必要的内容从B1
合并到B2
。请注意,B2
分支中的文件可能包含来自B1
以外的其他更改。我尝试使用tfs merge /candidates ...
命令希望它将文件比较(可能正在使用diff
工具)并提供输出,但这不起作用。只有当我使用tfs merge
命令时,它才会记录合并。有没有简单的解决方案,如果手动合并文件,我可以删除误报?
答案 0 :(得分:4)
你可以discard merge。这必须从命令行完成。打开Developer command prompt,然后导航到任一分支下的文件夹(即导航到受影响的workspaces之一)。然后输入:
tf merge /r /discard "$/Project/B1" "$/Project/B2" /v:C12345~C12345
这将识别变更集(在本例中为变更集#12345),并将其更新为合并到目标分支(分支B2)。将检出目标文件,但不会更改它们 - 您只需检查它们即可完成操作。之后,变更集将不再显示为合并候选项。您可以指定要同时合并的变更集范围,但它们应该是连续的。
请注意,执行此操作后,更改集有时仍会显示为合并候选项 - 这对于最新版本的TFS来说并不常见,并且几乎无法修复(除非您运行自己的本地安装的TFS和想要在数据库中弄脏你的手)。如果您最终使用其中一个被忽略的变更集,请忽略它。
TFS在合并和帮助您解决合并冲突方面做得非常出色。你唯一想要"合并"当你拥有大量自动生成的代码(在合并时产生很多难以解决的冲突)或者你有二进制文件时,手动的方式是你的方式。
答案 1 :(得分:0)
在一定程度上手动合并源控制原理。强烈建议您通过VS使用 tf merge命令或源代码控制合并向导来实现合并。您可以合并变更集版本,日期版本,标签版本,甚至工作区版本。如果您使用过该命令,一切都会非常简单。正如您所提到的,最简单的解决方案是使用tfs merge /candidates
,它将打印源中尚未合并到目标的所有变更集的列表。您只需要检查是否已将所有必要的内容合并到Branch2。
如果您坚持手动合并,删除误报的唯一可能方法是在合并后比较文件,文件夹或分支。您可以使用VS中的比较文件夹或快速比较(只需点击两次鼠标)此扩展程序TFS Productivity Pack (Visual Studio 2015)
答案 2 :(得分:0)
我认为这种情况没有任何简单的解决方案。在您提到的问题中,您合并了只需要的东西,可以合并B1中的所有内容 - > B2?如果是,请继续阅读:
如果B2中的其他更改最小,请首先创建B2分支中修改的文件列表(不属于B1的附加代码)。从B1创建一个新分支(比如B2_new)并检查/编辑从上面列表中准备的B2_new分支中的文件。 (在办理登机手续时,您可能会遇到冲突。)但是这会创建一个新的基线,现在您知道B1中的所有内容现在都出现在B2_new中。丢弃/锁定B2分支并继续使用B2_new。
如果B2中的更改非常重要,需要进行大量的手动编辑才能将其移动到B2_new,那么我只需要将其更改为从B1到B2进行合并(完整分支或仅你需要的文件夹)。是的,即使对于已手动合并的文件,这也会显示大量冲突。但是要在TFS中创建合并关系,你必须这样做。这将是一个很糟糕的合并。
就个人而言,如果B2的变化很小,我宁愿选择1,因为它更清洁,你会得到一个干净的石板。希望有所帮助。