2010-01-19 103 views
16

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

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

+0

你为什么想这么做? –

+0

我们有一个分支,其中有一些未完成的代码签入它,代码不再相关。 – Henrik

回答

20

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

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

这应该均衡一切,除了仅在B中创建且从未合并回来的文件。使用文件夹差异来找到&协调它们。

在2005/2008年删除+ rebranch在未来存在噩梦式调试命名空间冲突的风险。另一种选择,如果你有2008年的话,就是毁灭+重新分裂。很显然,它假定你都OK与B.

+3

“2005年/ 2008年的删除+重新分支将会带来未来可能出现的噩梦式调试命名空间冲突的风险。” - 阿门对此! – AakashM

+0

仍然在TFS2013中工作 –

+0

你是什么意思的“除非你运行TFS 2010”?你会使用TFS 2010中描述的合并和解析组合以外的其他方法吗?为什么? –

-1

删除分支B和创建分支A.

是否有一个理由,为什么你不想做一个新的?

+0

我想保留相同的名称,并且我想知道是否可能是删除和重新分配的问题。 – Henrik

+0

没有问题,我能想到的(除了事实,如果你想这样做删除旧分支将是困难的) –

+0

这个答案是downvoted - 我猜 - 因为历史将会丢失。但是,如果您的目标是使目标分支与源代码相同,那么这个历史究竟有多重要呢?在某些情况下,这仍然是一种选择。 –

16

原件在Visual Studio 2010中失去了所有的历史,我只是用毫无根据的合并来实现这一目标:

TF合并/无根据[来源路径] [目标路径] /递归

当解决冲突窗口弹出时,选择'Take source version'选项。请注意,仅存在于目标中的文件不会被使用无基本合并删除,但您可以比较两个分支以识别差异并手动删除它们。

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

+1

我认为这应该是问题的正确答案。正如我上面写的那样,'force'选项在所有情况下都不会有用,因为它仍然基于变更记录而不是文件内容。 – user2323704

4

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

  1. 确保您的工作区中有源和目标分支的最新版本。另外请确保您没有任何待处理的更改。
  2. 放弃从目标分支到源分支合并的所有候选。这是为了防止这些差异之后无意中合并回源代码分支。

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

注:确保使TF工具知道要使用的工作区和TFS服务器已经设置了工作文件夹的路径在工作区中。

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

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

    3.2。右键单击源代码管理资源管理器中的源代码分支,然后从上下文菜单中选择比较。如果在步骤2.1中将源分支合并到目标分支中,请仅采用源代码的最新版本。否则,从Source Version |选择Changeset键入组合框,然后从步骤2.1输入变更集编号。

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

enter image description here

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

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

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

注: T版规范指示的最新版本。

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

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

tf resolve $/target /recursive -auto:TakeTheirs

  • 在检查。

  • 确认不再有从目标为合并任何候选人源和有两个分支之间没有区别(这次只是使用最新版本,因为我们在步骤4中强制合并了最新版本)。

  • 请参见MSDN上的TF mergeresolve命令的详细信息。