TFS:用另一个覆盖分支

时间:2010-01-19 10:49:09

标签: tfs

是否可以用另一个覆盖分支?

或者是删除分支B并从分支A创建新分支的唯一解决方案吗?

4 个答案:

答案 0 :(得分:22)

除非你正在运行TFS 2010,否则我建议使用Merge + Resolve使这两个分支同步。

# cancel out of conflict dialog
tf merge A B -r -force -version:T
tf resolve B -r -auto:acceptTheirs

除了仅在B中创建且永不合并的文件之外,应该均衡所有内容。使用Folder Diff查找&调和它们。

2005/2008中的Delete + rebranch将来会冒着噩梦到调试命名空间冲突的风险。如果你有2008年,另一个选择是Destroy + rebranch。显然,假设您可以从B的原始副本中丢失所有历史记录。

答案 1 :(得分:17)

在Visual Studio 2010中,我只是使用baseless合并来实现此目的:

Tf merge / baseless [源路径] [目标路径] /递归

当弹出解决冲突窗口时,选择“Take source version”选项。注意,使用baseless merge不会删除目标中只存在的文件,但您可以比较2个分支以识别差异并手动删除它们。

请参阅:http://msdn.microsoft.com/en-us/library/bb668976.aspx

答案 2 :(得分:6)

我使用Richard Berg's answer取得了成功,但感觉有一些细节遗失了。这就是我能够消除与冲突解决方案和变更集相关的差异,这些差异尚未合并回源并使目标与源相同。请注意,这就是我将如何引用分支 - source是不应该更改的,而target是应该与source相同的那个。

  1. 确保工作区中包含源和目标分支的最新版本。另外,请确保您没有任何待处理的更改。
  2. 丢弃从目标分支到源分支的所有合并候选项。这是为了防止任何这些差异在以后被无意地合并回源分支。
  3. tf merge $/target $/source /recursive /discard

    注意:确保已将工作文件夹设置为工作区内的路径,以便tf工具知道要使用的工作区和TFS服务器。

    1. 检查应解决的分支之间是否存在差异 - 如果不存在,则无需采取进一步措施。

      3.1。查看目标分支上的历史记录,找到从源到目标的最后一次完整合并(忽略任何樱桃选择合并,因为这将导致大量误报) - 记下变更集编号。更简单的替代方法是执行从源分支到目标分支的合并,以从源分支到目标分支获得最新版本。

      3.2。右键单击Source Control Explorer中的源分支,然后从上下文菜单中选择Compare。如果在步骤2.1中将源分支合并到目标分支,则仅获取源的最新版本。否则,从源版本中选择更改集键入组合框,然后输入步骤2.1中的变更集编号。

      3.3。使用“目标路径”字段旁边的“浏览”按钮上的下拉箭头选择“服务器路径”。然后在打开的对话框中选择目标分支。

    2. enter image description here

      3.4。在Compare对话框中单击OK以执行比较。

      1. 执行从源分支到目标分支的合并,并传递force选项。这将忽略合并历史记录和合并变更集,即使它们已在过去合并过。
      2. tf merge $/source $/target /recursive /force /version:T

        注意: T版规范表示最新版本。

        1. 关闭合并冲突对话框。

        2. 通过选择源分支自动解决所有冲突。

        3. tf resolve $/target /recursive -auto:TakeTheirs

          1. 签到。

          2. 确认不再有从目标到源的合并候选者,并且两个分支之间没有差异(这次只使用最新版本,因为我们强制合并了最新版本在步骤4中。)。

          3. 有关tf mergeresolve命令的详细信息,请参阅MSDN。

答案 3 :(得分:-1)

删除分支B并从分支A创建一个新分支。

你有什么理由不想这样做吗?