ChatGPT解决这个技术问题 Extra ChatGPT

如何回滚 TFS 签入?

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

选项 1:获取先前版本

手动获取每个文件的先前版本签出编辑失败 - 签出(在 VS2008 中)迫使我获取最新版本

选项 2:获取 TFS 电动工具

从 cmd 行下载 Team Foundation Power Tools 问题回滚命令失败 - 如果有任何其他挂起的更改,它将不起作用

选项 3:手动撤消更改

手动撤消我的更改,然后提交一个新的变更集

问题

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

VSS 没有回滚功能。他们确实有另一个特性,恰好被命名为“回滚”,但在 TFS 术语中,它实际上是一个 Destroy。 (a) 您只能通过提示进行操作;如果在您要回滚的更改之后签入任何其他更改,它将不起作用(b)它永久删除数据库中的更改
哦,我多么渴望 VSS 回滚的轻松。
我最近偶然发现了这个问题 - 为什么在 TFS 中回滚如此困难。回滚是源代码控制的基本功能之一
这在 TFS 中太痛苦了!
切换到 Mercurial!我换了工作,把自己拉进了 TFS。从那以后,我一直在编写 PowerShell 脚本以使其看起来像命令行中的 Hg。

A
Andrew Keller

下载并安装 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 开始,要回滚,您不再需要使用命令行。
H
Happer

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

签出以进行编辑签入文件并在出现提示时忽略服务器更改。

它失败的原因是因为您必须打开“在结帐时获取最新版本的项目”选项。通过转到工具...选项...源代码管理...Visual Studio Tema Foundation Server 并取消选中“在签出时获取最新版本的项目”来关闭此选项

干杯


在使用 Power Tools 苦苦挣扎 2 小时后就这样做了,但没有得到任何结果...... wtf 与 TFS 不支持此基本功能......
该功能已添加到 TFS 2010 / Visual Studio 2010。
需要明确的是,这不是真正的回滚。它正在获得一个旧版本。不是一回事。
+1 指出在结帐时获取最新版本的项目设置的问题!
K
Kevin Lo

回滚已从 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 执行此操作?
E
Ed Blankenship

在 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


M
Martin Brown

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

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

即使您设置了在结帐时获取最新信息,这也将起作用。


没有为我工作。但这一定是因为一些傻瓜用愚蠢的策略设置了 TFS。
R
Ruslan

作为参考,如果您使用的是 TFS 2010,这里是 Rollback Command (Team Foundation Version Control) 手册的链接。

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

tf rollback /changeset:C12345

其中 12345 是您的变更集编号。在此之后,它将向您显示它所做的日志,您必须解决合并冲突。


B
Ben Scheirman

啊,刚刚找到了这个 CodePlex Article on using TFPT.exe(电动工具)来回滚变更集。

希望这可以帮助你。


C
CamelBlues

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

要回滚更改:

检查您想要的任何特定版本的更改编辑->全选->复制文件中的文本检查服务器上文件的任何版本粘贴在文件上并签入。

现在,您在回滚之前的所有中间变更集也都被保存了!多么棒的功能!


起初我认为这很讽刺,但这个解决方案实际上可能适用于我们这些没有幸运获得回滚许可的人。
除非后来对您实际想要保留的相同文件进行了更改。
粗鲁,但这是我在 TFS 中执行此操作的唯一方法。如果我进行结帐然后检索旧版本 TFS 将在我尝试重新签入时自动合并到最后一个版本。
B
Ben Scheirman

如果您进行了 1 次签入,并且只想撤消它,则它具有与之关联的变更集 #。对有问题的文件夹进行历史记录以查看错误的变更集。打开它以查看详细信息(所有文件已更改等)。

我相信您可以从该屏幕恢复或撤消变更集,但是当我尝试执行此操作时,我的 Visual Studio 刚刚崩溃。 /sigh——我绝对分享你的痛苦。

我在这个网站上哪里可以下载 TFS?


不,从历史 UI 回滚仅在 TFS 2010 中添加。
P
Phillip Wells

我认为 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


j
jlo

Ben Scheirman - Changeset Details 对话框没有回滚功能。


D
Damir Arh

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

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


G
Guru

获取特定版本

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

使用 Changeset ... 按钮查找您的 Changeset 或只需输入,如果您知道此号码。

在您拥有特定的变更集之后。

查看

报到


P
PJUK

这些解决方案都不适合我 Dave Roberts 的解决方案是最接近我实际工作的解决方案。我没有启用结帐时获取最新版本的项目,但这似乎是一项服务器策略。

我对此的解决方案是检查文件以进行编辑,获取特定版本,然后在检测到冲突时使用合并工具(并手动合并任何更改),以使文件处于原来的状态。

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

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


S
StarCub

上述解决方案适用于 TFS2008。 TFS2010 具有内置的回滚功能。有关详细信息,请参阅 this 文章。


除了 VS2010 (tf) 不适用于 TFS2008 并且由于 TFPT 2010 不再有回滚,你被水洗了。
E
Evgeniy Berezovsky

安装最新版本的 TFS Power Tools(2011 年 8 月),您只需右键单击更改集并选择“回滚整个更改集”。没有比这更容易的了。

可在此处获得:http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f

在上一页的 Team Explorer Enhancements 下暗示了这一点:

此版本的新功能是 [..] 轻松回滚版本控制中的更改。