如何回退TFS登机手续?


92

我想回滚最近在TFS中所做的更改。在Subversion中,这非常简单。但是,这似乎在TFS中令人难以置信:

选项1:获取先前版本

  1. 手动获取每个文件的先前版本
  2. 签出进行编辑
  3. 失败-结帐(在VS2008中)迫使我获取最新版本

选项2:获取TFS电动工具

  1. 下载Team Foundation电动工具
  2. 从cmd行发出回滚命令
  3. 失败-如果还有其他待处理的更改,它将不起作用

选项3:手动撤消更改

  1. 手动撤消我的更改,然后提交新的更改集

如何回滚到TFS中的先前变更集?


2
VSS没有回滚。它们确实有另一个功能,恰好被称为“回滚”,但就TFS而言,这确实是一个破坏。(a)您只能从小费做起;如果您要回滚的内容之后又检查了其他任何更改,则将无法正常运行(b)从数据库中永久删除更改
Richard Berg

1
噢,我多么渴望VSS回滚。
格雷格

2
我最近偶然发现了这个问题-为什么很难在TFS中回滚。回滚是源代码管理的基本功能之一
JohnIdol

2
在TFS中这太痛苦了!
乔恩Kragh

1
切换到Mercurial!我换了工作,将自己投入到TFS中。从那时起,我一直在编写PowerShell脚本,以使其从命令行看起来像Hg。
相扑2012年

Answers:


63
  1. 下载并安装Team Foundation Power Tools
  2. 打开Visual Studio命令提示符
  3. 导航到TFS映射到的文件系统上的目录。如果您不这样做,则在尝试回滚时会收到“无法确定工作区”错误
  4. 确保其他所有内容都已签入或搁置
  5. 运行tfpt rollback调出界面。
  6. 选择要回滚的变更集
  7. 检入您回滚的文件的新版本

该工具的最大缺点是,它需要在合并之前刷新工作空间中的所有内容。我通过为回滚创建一个新的工作区来解决了这个问题,该工作区直接映射到源树中受影响文件所在的位置。

如果您需要帮助找出哪些变更集可以回滚,我发现免费的Team Foundation Side Kicks加载项中的代码查看工具非常有用。


您可以尝试这种方式,但是请注意,这些工具的文档记录不充分,即使您能够克服所有错误,也可能无法或可能无法真正回滚。(我刚刚尝试了2小时)
炼金术

1
这项技术对我有用。工作区的建议非常好(如果您要处理大量的代码库,这一点很重要)。
cloggins 2010年

1
警告...如果您使用的TFS和Visual Studio版本不匹配,则会出现警告22。我正在将VS2010与TFS2008(IT的经典案例不能赶上开发人员)一起使用,而TF.EXE与VS2010现已回滚了……但不适用于TFS2008。而且tfpt 2010已删除回滚,因此我无法采用旧方法。
西蒙·吉尔比

7
在“回滚”命令被搬出电动工具为VS2010的,所以现在你只需要输入“TF回滚”:social.msdn.microsoft.com/Forums/en/tfspowertools/thread/...

从2011年8月的TFS Power Tools版本开始,要回滚,您不再需要使用命令行。
Joerage 2011年

24

您的解决方案#1将起作用:1.手动获取每个文件的先前版本

  1. 签出进行编辑

  2. 检入文件,并在出现提示时忽略服务器更改。

它对您失败的原因是因为您必须启用“在检出时获取最新版本的项目”选项。通过转到工具...选项...源代码控制... Visual Studio Tema Foundation Server并取消选中“在检出时获取最新版本的项目”来关闭此选项

干杯


2
苦苦挣扎了2个小时的电动工具,却一无所获,只是这样做了……wtf与TFS不支持该基本功能...
炼金术2010年

该功能已添加到TFS 2010 / Visual Studio 2010中
。– Robaticus

2
需要明确的是,这不是真正的回滚。正在获取旧版本。不一样的东西。
瑞安·克伦威尔

+1用于指出“ 在结帐时获取最新版本的项目”设置中的问题!
Crispalot爵士

18

回滚已从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]]

1
有没有一种方法可以直接从Visual Studio中执行此操作?
凯尔·德莱尼


14

使选项1起作用的另一种方法是颠倒步骤的顺序:

  1. 签出物品
  2. 获取特定版本到旧版本
  3. 签入(忽略“警告服务器版本较新”对话框),或者在“待更改”对话框的“冲突”部分上,通过保留本地版本来解决冲突。

即使您设置了“在结帐时获取最新信息”也可以使用。


1
没有为我工作。但这一定是因为有些愚蠢的人以愚蠢的政策设立了TFS。
SHODAN 2010年

5

作为参考,如果您使用的是TFS 2010,则这是“ 回滚命令(Team Foundation版本控制)”手册的链接。

要回滚特定的变更集,请转到Visual Studio命令提示符(2010),导航到TFS工作区目录,然后键入以下命令:

tf rollback /changeset:C12345

12345您的变更集号码在哪里。在此之后,它将向您显示其操作的日志,并且您必须整理出合并冲突。



4

没有回滚选项实际上是TFS的功能;)

要回滚更改:

  1. 查看所需的任何特定版本的更改
  2. 编辑->全选->复制文件中的文本
  3. 检出服务器上文件的任何版本
  4. 粘贴文件并签入。

现在,您还可以保存回滚之前的所有中间变更集!多么伟大的功能!


起初我以为这很讽刺,但是这种解决方案实际上可能对我们中那些不太幸运地获得回滚许可的人有用。
EBarr 2010年

除非以后对实际要保留的文件进行了更改。
罗伯特·耶普森

粗略,但这是我可以在TFS中执行此操作的唯一方法。如果我做一结帐,然后检索旧版本的TFS将AutoMerge到最后的版本,每当我尝试签回。
史蒂夫

1

如果您进行了1次签入,而您只想撤消签入,则该签入具有一个变更集#。对相关文件夹进行历史记录,以查看错误的变更集。打开它可以查看详细信息(所有文件都已更改,等等)。

我相信您可以从该屏幕还原或撤消更改集,但是当我尝试执行此操作时,Visual Studio刚刚崩溃。/叹气-我一定会分享你的痛苦。

我在哪里可以在此站点上下调TFS?


不,从历史记录UI回滚只加在2010年TFS
理查德·伯格


1

Ben Scheirman-“更改集详细信息”对话框不具有回滚功能。


1

另一个选择是TFSPlus。此Visual Studio插件将(其中包括)“获取此版本”命令添加到历史记录窗口。如果您已签出文件,它将用该版本替换。如果之后进行签入,则将有效地回滚到该版本。

但是,它适用于单个文件而不是完整的变更集。



1

获取特定版本

在“ 版本 类型”下拉列表中,选择“类型”作为变更集

如果您知道此号码,请使用Changeset ...按钮查找您的Changeset或直接键入。

获得特定的变更集之后。

退房

报到


0

这些解决方案都不适合我Dave Roberts解决方案与我实际使用的解决方案最接近。我没有启用“在签出时获取项目的最新版本”,但是这似乎是服务器策略。

我的解决方案是检出文件以进行编辑,获取特定版本,然后在检测到冲突时使用合并工具(并手动合并所有更改),以使文件保持原状。

我打算将其与特定版本进行比较,然后复制整个文件,然后将其粘贴到旧版本的顶部。

仍然应该有一个更简单的方法来做到这一点!


0

上面的解决方案适用于TFS2008。TFS2010具有内置的回滚功能。看到文章的详细信息。


除了VS2010(tf)不能与TFS2008配合使用,并且由于TFPT 2010不再具有回滚功能之外,您将陷入困境。
西蒙·吉尔比

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.