如何从层次结构的中间删除分支?

How to Remove a Branch from the Middle of the Hierarchy?

提问人:John Saunders 提问时间:10/20/2011 更新时间:7/29/2014 访问量:2607

问:

我有一个团队项目,使用 ALM Rangers 分支指南中的“标准”分支模式创建:

Standard Branch Hierarchy

创建它后,我发现我只需要“基本”模式。也就是说,我不需要“Service Pack”分支。

有没有办法删除“Service Pack”分支并“修复”层次结构,以便“发布”位于层次结构中的“Main”下?现在,“Service Pack”层次结构中的每个变更集在“Release”层次结构中都有一个相应的变更集,因为“Service Pack”刚刚阻碍了。

TFS 分支

评论

3赞 John Saunders 2/4/2012
为什么世界上有人会反对这个问题?

答:

5赞 Torbjörn Bergstedt 10/20/2011 #1

不幸的是,TFS 中的分支是老式的(或者,如果你问 Torvalds ;),“像恐龙一样”因为一旦创建,结构就被设置并且无法更改。我相信您必须在 Main 的正下方创建一个新的 Release Branch,然后执行从旧 Release 分支到新 Release 分支的无根据合并。我认为您应该使用合并命令的参数来停止显示“解决冲突”对话框。/noprompt

这将给你带来比实际需要更多的冲突,因为 TFS 不知道要使用哪个祖先。但是,由于你希望从原始 Release 分支中获取所有内容,因此可以使用该命令告诉 TFS 始终获取源分支中的更改。tf resolve /recursive /auto:TakeTheirs

之后,您应该能够删除旧的分支树。

很复杂,但并非不可能。

评论

1赞 Lars Truijens 10/21/2011
将 /discard 参数与无基础合并一起使用时,不会发生冲突,并且两端都不会更改任何代码
1赞 Craig Brunetti 7/27/2018
在发表此评论时,TFS 已经具有“重新父级”功能,允许这种结构更改。
2赞 Gary Doublé 8/8/2013 #2

在类似的情况下,以下内容对我有用

tf merge /baseless /recursive /noprompt /discard $/TFS/Path/To/Release $/TFS/Path/To/Main

然后:

  • 删除“Service Pack”分支
  • 签入“Main”和“Service Pack”

现在您可以进行从“Release”到“Main”的正常 GUI 合并

注意:正如许多人已经提到的,要小心毫无根据的合并,当被滥用时,它们可能会在以后咬你的珠宝。

4赞 RMalke 5/16/2014 #3

好吧,我不知道旧版本的,但至少在 / 中,你可以做:TFSTFS2012VS2013

  1. 来自 Main -> Release 的毫无根据的合并
  2. Source Control Explorer > Branching and Merging > Reparent,选择“主要”(新父级)

做!

评论

0赞 RMalke 8/1/2014
有时,向导窗口需要一些时间来加载可能的父级
1赞 Edward Thomson 7/29/2014 #4

最简单的解决方案是不删除或重新设置父级。

Service Pack 分支只是名义上的“Service Pack 分支”。删除“release”分支,并将“service pack branch”重命名为“release”。

评论

0赞 John Saunders 7/29/2014
简约大方,答案。