【发布时间】:2015-10-22 07:09:03
【问题描述】:
是否可以用另一个分支覆盖?
或者是删除分支 B 并从分支 A 建立新分支的唯一解决方案?
【问题讨论】:
-
你为什么要这样做?
-
我们有一个分支,其中签入了一些未完成的代码,这些代码不再相关。
标签: tfs
是否可以用另一个分支覆盖?
或者是删除分支 B 并从分支 A 建立新分支的唯一解决方案?
【问题讨论】:
标签: tfs
除非您运行的是 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 年删除 + 重新分支会在未来冒着噩梦般的调试命名空间冲突的风险。如果您有 2008 年,另一个选项是销毁 + 重新分支。显然,假设您可以从 B 的原始副本中丢失所有历史记录。
【讨论】:
在 Visual Studio 2010 中,我只是使用 baseless 合并来实现:
Tf merge /baseless [源路径] [目标路径] /recursive
当解决冲突窗口弹出时,选择“获取源版本”选项。注意,只存在于target中的文件不会被baseless merge删除,但是你可以比较两个分支来识别差异并手动删除。
【讨论】:
我使用Richard Berg's answer 取得了成功,但感觉缺少一些细节。这就是我能够消除与尚未合并回源的冲突解决和变更集相关的差异并使目标与源相同的方法。请注意,这就是我将如何引用分支 - source 是不应该更改的分支,而 target 是应该与 source 相同的分支。
tf merge $/target $/source /recursive /discard
注意:确保您已将工作文件夹设置为工作空间内的路径,以便 tf 工具知道要使用哪个工作空间和 TFS 服务器。
检查应解决的分支之间是否存在差异 - 如果没有,则无需采取进一步措施。
3.1。查看目标分支上的历史记录并找到从源到目标的最后一次完整合并(忽略任何樱桃采摘合并,因为这将导致大量误报) - 请注意变更集编号。一个更简单的替代方法是执行从源分支到目标分支的合并,以从源分支获取最新版本到目标分支。
3.2。在源代码管理资源管理器中右键单击源分支,然后从上下文菜单中选择比较。如果您在步骤 2.1 中将源分支合并到目标分支,则只为源获取最新版本。否则从源版本中选择变更集 |键入组合框,然后输入步骤 2.1 中的变更集编号。
3.3。使用目标路径字段旁边的浏览按钮上的下拉箭头选择服务器路径。然后在打开的对话框中选择目标分支。
3.4。单击“比较”对话框上的“确定”进行比较。
tf merge $/source $/target /recursive /force /version:T
注意:T版规格为最新版本。
关闭合并冲突对话框。
通过选择源分支自动解决所有冲突。
tf resolve $/target /recursive -auto:TakeTheirs
签到。
确认不再有任何从目标到源的合并候选,并且两个分支之间没有差异(这次只是使用最新版本,因为我们对最新版本进行了强制合并在第 4 步中。)。
【讨论】:
删除分支 B 并从分支 A 新建一个。
您是否有不想这样做的原因?
【讨论】: