如何回滚 TFS 签入?
Posted
技术标签:
【中文标题】如何回滚 TFS 签入?【英文标题】:How do I rollback a TFS check-in? 【发布时间】:2010-09-07 03:38:24 【问题描述】:我想回滚我最近在 TFS 中所做的更改。在 Subversion 中,这非常简单。然而,在 TFS 中这似乎是一个令人难以置信的头痛:
选项 1:获取先前版本
-
手动获取每个文件的先前版本
签出以进行编辑
失败 - 结帐(在 VS2008 中)强制我获取最新版本
选项 2:获取 TFS 电动工具
-
下载 Team Foundation 电动工具
从 cmd 行发出回滚命令
失败 - 如果有任何其他未决更改,它将无法工作
选项 3:手动撤消更改
-
手动撤消我的更改,然后提交新的更改集
问题
如何回滚到 TFS 中的先前变更集?
【问题讨论】:
VSS 没有回滚功能。他们确实有另一个特性,恰好被命名为“回滚”,但在 TFS 术语中,它实际上是一个 Destroy。 (a) 您只能通过提示进行操作;如果在您要回滚的更改之后签入任何其他更改,它将不起作用(b)它永久删除数据库中的更改 哦,我多么渴望轻松回滚 VSS。 我最近偶然发现了这个问题 - 为什么在 TFS 中回滚如此困难。回滚是源码控制的基本功能之一 这在 TFS 中太痛苦了! 切换到 Mercurial!我换了工作,把自己拉进了 TFS。从那以后,我一直在编写 PowerShell 脚本,让它看起来像 Hg。 【参考方案1】:-
下载并安装Team Foundation Power Tools。
打开 Visual Studio 命令提示符
导航到文件系统上 TFS 映射到的目录。如果您不这样做,您将在尝试回滚时收到“无法确定工作区”错误
确保所有其他物品都已签入或搁置
运行 tfpt rollback 以调出界面。
选择要回滚的变更集
签入您回滚的文件的新版本
该工具的最大缺点是它需要在合并之前刷新工作区中的所有内容。我通过为回滚创建一个新工作区来解决这个问题,该工作区直接映射到源树中受影响文件所在的位置。
如果您需要帮助确定要回滚哪些变更集,我发现免费的 Team Foundation Side Kicks 插件中的代码审查工具非常有用。
【讨论】:
您可以尝试这种方式,但请注意,这些工具没有很好的文档记录,即使您可以克服所有错误,您也可能无法真正回滚。 (我刚试了 2 小时) 这项技术对我有用。工作区建议非常好(如果您正在处理大型代码库,这很重要)。 警告...如果您使用不匹配的 TFS 和 Visual Studio 版本,则会出现问题 22。我正在使用带有 TFS2008 的 VS2010(IT 没有赶上开发的经典案例),带有 VS2010 的 TF.EXE 现在已经回滚......但它不适用于 TFS2008。并且 tfpt 2010 已经删除了回滚,所以我不能用旧的方式来做。 'rollback' 命令已从 VS2010 的 Power Tools 中移出,所以现在您只需键入 'tf rollback' :social.msdn.microsoft.com/Forums/en/tfspowertools/thread/… 从 2011 年 8 月版的 TFS Power Tools 开始,要回滚,您不再需要使用命令行。【参考方案2】:您的解决方案 #1 将起作用: 1.手动获取每个文件的先前版本
签出以进行编辑
签入文件并在出现提示时忽略服务器更改。
它失败的原因是因为你必须拥有 “在结帐时获取最新版本的项目”选项已打开。 通过转到工具...选项...源代码管理...Visual Studio Tema Foundation Server 并取消选中“在签出时获取最新版本的项目”来关闭此选项
干杯
【讨论】:
在使用 Power Tools 苦苦挣扎 2 小时后就这样做了,却一无所获...wtf 与 TFS 不支持此基本功能... 该功能已添加到 TFS 2010 / Visual Studio 2010。 要明确这不是真正的回滚。它正在获得一个旧版本。不是一回事。 +1 指出了 Get latest version of item on check out 设置的问题!【参考方案3】:回滚已从 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]]
【讨论】:
有没有办法直接从 Visual Studio 执行此操作?【参考方案4】:在 TFS 2010 版本控制中,您有两个选项可用于回滚(还原)变更集。第一个选项是使用用户界面(如果您安装了最新版本的TFS 2010 Power Tools)。
另一个选项是使用 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
【讨论】:
【参考方案5】:使您的选项 1 起作用的另一种方法是颠倒步骤的顺序:
-
查看项目
获取特定版本到旧版本
签入(忽略“警告服务器版本较新”对话框)或在 Pending Changes 对话框的冲突部分通过保留本地版本来解决冲突。
即使您设置了“结帐时获取最新信息”,这也将起作用。
【讨论】:
对我不起作用。但这一定是因为某些傻瓜用愚蠢的策略设置了 TFS。【参考方案6】:作为参考,如果您使用的是 TFS 2010,这里是 Rollback Command (Team Foundation Version Control) 手册的链接。
要回滚特定的变更集,请转到 Visual Studio 命令提示符 (2010),导航到 TFS 工作区目录,然后输入命令:
tf rollback /changeset:C12345
12345
是您的变更集编号。在此之后,它会向您显示它所做的日志,并且您必须解决合并冲突。
【讨论】:
【参考方案7】:啊,刚刚找到了这个CodePlex Article on using TFPT.exe(电动工具)来回滚变更集。
希望对你有所帮助。
【讨论】:
【参考方案8】:没有回滚选项实际上是 TFS 的特性;)
要回滚更改:
-
查看您想要的任何特定版本的更改
编辑->全选->复制文件中的文本
检查服务器上文件的任何版本
粘贴文件并签入。
现在您在回滚之前的所有中间变更集也都被保存了!多么棒的功能!
【讨论】:
起初我认为这是讽刺,但这个解决方案实际上可能适用于我们这些没有幸运获得回滚权限的人。 除非您后来对您实际想要保留的相同文件进行了更改。 粗略,但这是我在 TFS 中执行此操作的唯一方法。如果我进行签出,则检索旧版本 TFS 将在我尝试重新签入时自动合并到最后一个版本。【参考方案9】:如果您进行了 1 次签入,并且只想撤消它,则它具有与之关联的变更集 #。对有问题的文件夹进行历史记录以查看错误的变更集。打开它以查看详细信息(所有文件已更改等)。
我相信您可以从该屏幕恢复或撤消变更集,但是当我尝试执行此操作时,我的 Visual Studio 刚刚崩溃。 /sigh -- 我绝对分担你的痛苦。
我在这个网站的哪里下载 TFS?
【讨论】:
不,从历史 UI 回滚仅在 TFS 2010 中添加。【参考方案10】:我认为 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 了解更多信息。
【讨论】:
【参考方案11】:Ben Scheirman - Changeset Details 对话框没有回滚功能。
【讨论】:
【参考方案12】:另一个选项是TFSPlus。此 Visual Studio 插件将(除其他外)“获取此版本”命令添加到历史记录窗口。如果您已签出该文件,它将用该版本替换它。如果您之后进行签入,您将有效地回滚到该版本。
不过,它适用于单个文件而不是完整的变更集。
【讨论】:
【参考方案13】:使用 TFS powertools 是最好的方法http://rajputyh.blogspot.com/2008/08/change-set-rollback-using-tfs-power.html
【讨论】:
【参考方案14】:获取特定版本
在 Version Type 下拉菜单中选择 Type as Changeset
如果您知道这个数字,请使用 Changeset ... 按钮查找您的 Changeset 或直接输入。
在你拥有特定的变更集之后。
退房
签到
【讨论】:
【参考方案15】:这些解决方案都不适合我 Dave Roberts 的解决方案是最接近我实际工作的解决方案。 我没有启用在结帐时获取最新版本的项目,但这似乎是一项服务器策略。
我对此的解决方案是检查文件以进行编辑,获取特定版本,然后在检测到冲突时使用合并工具(并手动合并任何更改),以使文件处于原来的状态。
我打算与特定版本进行比较并复制整个文件,然后将其粘贴到旧文件的顶部。
应该还有更简单的方法来做到这一点!
【讨论】:
【参考方案16】:上述解决方案适用于 TFS2008。 TFS2010 具有内置的回滚功能。详情见this文章。
【讨论】:
除了 VS2010 (tf) 对 TFS2008 不起作用,而且由于 TFPT 2010 不再有回滚,你就完蛋了。【参考方案17】:安装最新版本的 TFS Power Tools(2011 年 8 月),您只需右键单击更改集并选择“回滚整个更改集”。没有比这更容易的了。
这里有: http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f
上面页面的Team Explorer Enhancements下有提示:
此版本的新功能是 [..] 轻松回滚版本控制中的更改。
【讨论】:
以上是关于如何回滚 TFS 签入?的主要内容,如果未能解决你的问题,请参考以下文章