TFS:用另一个覆盖分支

Hen*_*rik 21 tfs

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

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

Ric*_*erg 22

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

# cancel out of conflict dialog
tf merge A B -r -force -version:T
tf resolve B -r -auto:acceptTheirs
Run Code Online (Sandbox Code Playgroud)

这应该均衡所有内容,除了仅在B中创建并且从不合并的文件.使用Folder Diff查找并协调它们.

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

  • "2005/2008年的删除+重新分配可能会导致未来发生噩梦到调试命名空间冲突的风险." - 阿门! (3认同)

小智 17

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

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

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

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


Sco*_*nro 8

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

  1. 确保在工作区中具有源和目标分支的最新版本.还要确保您没有任何待处理的更改.
  2. 丢弃从目标分支到源分支的所有合并候选项.这是为了防止这些差异中的任何一个在以后无意中合并回源分支.

tf merge $/target $/source /recursive /discard

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

  1. 检查应该解决的分支之间是否存在差异 - 如果不存在,则不需要进一步的操作.

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

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

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

在此输入图像描述

3.4.在"比较"对话框中单击"确定"以执行比较.

  1. 执行从源分支到目标分支的合并,并传递force选项.这将忽略合并历史记录和合并变更集,即使它们已在过去合并.

tf merge $/source $/target /recursive /force /version:T

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

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

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

tf resolve $/target /recursive -auto:TakeTheirs

  1. 报到.

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

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