我想回滚我最近在 TFS 中所做的更改。在 Subversion 中,这非常简单。然而,在 TFS 中这似乎是一个令人难以置信的头痛:
选项 1:获取先前版本
手动获取每个文件的先前版本签出编辑失败 - 签出(在 VS2008 中)迫使我获取最新版本
选项 2:获取 TFS 电动工具
从 cmd 行下载 Team Foundation Power Tools 问题回滚命令失败 - 如果有任何其他挂起的更改,它将不起作用
选项 3:手动撤消更改
手动撤消我的更改,然后提交一个新的变更集
问题
如何回滚到 TFS 中的先前变更集?
下载并安装 Team Foundation Power Tools。打开 Visual Studio 命令提示符导航到 TFS 映射到的文件系统上的目录。如果您不这样做,您将在尝试回滚时收到“无法确定工作区”错误 确保已签入其他所有内容或搁置运行 tfpt rollback 以调出界面。选择您要回滚的变更集签入您回滚的文件的新版本
该工具的最大缺点是它需要在合并之前刷新工作区中的所有内容。我通过为回滚创建一个新工作区来解决这个问题,该工作区直接映射到源树中受影响文件所在的位置。
如果您需要帮助确定要回滚哪些变更集,我发现免费的 Team Foundation Side Kicks 插件中的代码审查工具非常有用。
您的解决方案 #1 将起作用: 1. 手动获取每个文件的先前版本
签出以进行编辑签入文件并在出现提示时忽略服务器更改。
它失败的原因是因为您必须打开“在结帐时获取最新版本的项目”选项。通过转到工具...选项...源代码管理...Visual Studio Tema Foundation Server 并取消选中“在签出时获取最新版本的项目”来关闭此选项
干杯
回滚已从 tfpt.exe 移至 Team Foundation 版本控制工具 tf.exe。
TF - Team Foundation Version Control Tool, Version 10.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Rolls back the changes in a single or a range of changesets:
tf rollback /changeset:changesetfrom~changesetto [itemspec] [/recursive]
[/lock:none|checkin|checkout] [/version:versionspec]
[/keepmergehistory] [/noprompt] [/login:username,[password]]
tf rollback /toversion:versionspec itemspec [/recursive]
[/lock:none|checkin|checkout] [/version:versionspec]
[/keepmergehistory] [/noprompt] [/login:username,[password]]
在 TFS 2010 版本控制中,您有两个选项可用于回滚(恢复)变更集。第一个选项是使用用户界面(如果您安装了最新版本的 TFS 2010 Power Tools)。
https://i.stack.imgur.com/mfKMy.png
另一个选项是使用 TFS 2010 版本控制命令行应用程序:
tf.exe rollback
我的 blog post 上提供了有关这两种方法的信息:http://www.edsquared.com/2010/02/02/Rollback+Or+Undo+A+Changeset+In+TFS+2010+Version+Control.aspx
使您的选项 1 起作用的另一种方法是颠倒步骤的顺序:
签出项目获取特定版本到旧版本签入(忽略“警告服务器版本较新”对话框)或在“待定更改”对话框的冲突部分通过保留本地版本来解决冲突。
即使您设置了在结帐时获取最新信息,这也将起作用。
作为参考,如果您使用的是 TFS 2010,这里是 Rollback Command (Team Foundation Version Control) 手册的链接。
要回滚特定变更集,请转到 Visual Studio 命令提示符 (2010),导航到 TFS 工作区目录,然后输入命令:
tf rollback /changeset:C12345
其中 12345
是您的变更集编号。在此之后,它将向您显示它所做的日志,您必须解决合并冲突。
没有回滚选项实际上是 TFS 的功能;)
要回滚更改:
检查您想要的任何特定版本的更改编辑->全选->复制文件中的文本检查服务器上文件的任何版本粘贴在文件上并签入。
现在,您在回滚之前的所有中间变更集也都被保存了!多么棒的功能!
如果您进行了 1 次签入,并且只想撤消它,则它具有与之关联的变更集 #。对有问题的文件夹进行历史记录以查看错误的变更集。打开它以查看详细信息(所有文件已更改等)。
我相信您可以从该屏幕恢复或撤消变更集,但是当我尝试执行此操作时,我的 Visual Studio 刚刚崩溃。 /sigh——我绝对分享你的痛苦。
我在这个网站上哪里可以下载 TFS?
我认为 Team Foundation Power Tools 是可行的方法。如果有待处理的更改,您可以将它们移动到搁置集,然后在运行回滚命令之前撤消或签入所有待处理的更改。有关详细信息,请参阅 http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=How%20to%20undo%20a%20check-in&referringTitle=Source%20Control%20Practices%20at%20a%20Glance。
Ben Scheirman - Changeset Details 对话框没有回滚功能。
另一个选项是 TFSPlus。此 Visual Studio 插件将(除其他外)“获取此版本”命令添加到历史记录窗口。如果您已签出该文件,它将用该版本替换它。如果您之后进行签入,您将有效地回滚到该版本。
不过,它适用于单个文件而不是完整的变更集。
使用 TFS powertools 是最好的方法http://rajputyh.blogspot.com/2008/08/change-set-rollback-using-tfs-power.html
获取特定版本
在版本类型下拉列表中选择类型作为变更集
使用 Changeset ... 按钮查找您的 Changeset 或只需输入,如果您知道此号码。
在您拥有特定的变更集之后。
查看
报到
这些解决方案都不适合我 Dave Roberts 的解决方案是最接近我实际工作的解决方案。我没有启用结帐时获取最新版本的项目,但这似乎是一项服务器策略。
我对此的解决方案是检查文件以进行编辑,获取特定版本,然后在检测到冲突时使用合并工具(并手动合并任何更改),以使文件处于原来的状态。
我打算与特定版本进行比较并复制整个文件,然后将其粘贴到旧文件的顶部。
仍然应该有一个更简单的方法来做到这一点!
上述解决方案适用于 TFS2008。 TFS2010 具有内置的回滚功能。有关详细信息,请参阅 this 文章。
安装最新版本的 TFS Power Tools(2011 年 8 月),您只需右键单击更改集并选择“回滚整个更改集”。没有比这更容易的了。
可在此处获得:http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f
在上一页的 Team Explorer Enhancements 下暗示了这一点:
此版本的新功能是 [..] 轻松回滚版本控制中的更改。