回滚命令 (Team Foundation 版本控制)

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Visual Studio 2022 |Visual Studio 2019 |Visual Studio 2017 |Visual Studio 2015 |Visual Studio 2013

可以使用此命令将一个或多个更改集的效果回滚到一个或多个版本控制的项。 此命令不会从项的版本历史记录中删除更改集。 相反,此命令会在工作区中创建一组挂起的更改,这些更改会否定你指定的更改集的效果。

先决条件

若要使用此命令,必须将 “读取”、“ 签出”和 “签入 ”权限设置为 “允许”。 有关详细信息,请参阅 默认 TFVC 权限

语法

tf rollback /toversion:VersionSpec ItemSpec [/recursive] [/lock:none|checkin|checkout] [/version:versionspec] [/keepmergehistory] [/login:username,[password]] [/noprompt]
tf rollback /changeset:ChangesetFrom~ChangesetTo [ItemSpec] [/recursive] [/lock:none|checkin|checkout] [/version:VersionSpec]
[/keepmergehistory] [/noprompt] [/login:username,[password]]

参数

参数

Argument

说明

ChangesetFrom~ChangesetTo

将此参数与 /changeset 选项结合使用,以指定要回滚的更改集。 可以通过以下方式指定更改集:

  • 单个更改集

示例: /changeset:C11

  • 更改集的范围

示例: /changeset:C7~C20

  • 日期

示例 :/changeset:D09/30/09

  • 日期范围

示例:/changeset:D09/23/09~D10/07/09

  • 最新更改集

示例: /changeset:Tip/changeset:T

ItemSpec

使用此参数可指定要回滚的一个或多个项。 如果使用 /toversion 选项,则必须指定此参数。

有关 Team Foundation 如何分析项目规范的详细信息,请参阅 使用 Team Foundation 版本控制命令

注意

可以指定多个 Itemspec 参数。

VersionSpec

/version 选项和 /toversion 选项的用户提供的值。

将此参数与 /toversion 选项结合使用,将文件还原到特定变更集中的状态。 可以通过以下方式指定版本:

  • 单个更改集

示例: /toversion:C32

  • 午夜) 的日期 (

示例: /toversion:D06/19/09

  • 日期和时间

示例: /toversion:D06/19/09T14:32

  • 标签

示例: /toversion:LTestLabel

  • 映射到当前目录的工作区中的版本

示例: /toversion:W

  • 特定工作区中的版本

示例: /toversion:WResolveRIConflicts;AKerry

有关 Team Foundation 如何分析 versionspecs 的详细信息,请参阅 使用 Team Foundation 版本控制命令

选项

选项

说明

/changeset

使用此选项可指定要否定的一个或多个特定更改集。

/keepmergehistory

仅当回滚的一个或多个更改集包含 分支合并 更改时,此选项才有效。 如果希望同一源和同一目标之间将来合并以排除要回滚的更改,请指定此选项。

/lock

指定此选项以防止其他用户签入或签出项目,直到回滚所有关联的更改。 有关详细信息,请参阅 了解锁类型

锁定选项

默认。 未应用锁。 如果回滚的文件已被锁定,此选项将删除该锁。

  • 签入

通过执行签入,锁定项目,直到释放锁。 其他用户可以签出指定的项,但在删除锁之前,用户无法签入修订。 无法锁定已锁定的文件。

  • 签出

防止用户签入或签出锁定的项目,直到通过执行签入来删除锁。

/login

/noprompt

禁止显示此操作期间出现的任何对话框。

/recursive

如果希望操作在子文件夹中包括项,请指定此选项。

/toversion

指定此选项可将文件还原到特定变更集中的状态。 使用此选项时,将否定自指定版本以来已应用的所有更改集的效果。

/version

指定要回滚的文件和文件夹的当前版本。

注解

tf rollback 命令否定为指定的每个项指定的每个更改集的效果。 下表列出了操作如何否定每种类型的更改。

如果回滚此更改... ...回滚更改和以下其他更改已进行
添加分支取消删除 delete
edit edit
encoding encoding
重命名/移动 重命名/移动
delete 删除
merge 更改可否定已合并到当前分支的任何更改。

以下列表提供了回滚命令导致的一些更改示例:

  • 如果要回滚发生 添加 更改的更改集,回滚操作会导致 回滚 更改和 删除 更改。

  • 如果要回滚发生 编辑 更改的更改集 521,回滚操作会导致 回滚 更改,而 编辑 更改会否定更改集 521 中 编辑 更改所包含的更改。

  • 在 changeset 132 中,你已从 $/BranchA/File1.txt 合并到 $/BranchB/File1.txt。 合并中包含的更改包括在更改集 92 和 104 中的 编辑 更改。 在 changeset 162 中,回滚更改集 132,这会导致 回滚 更改,并将 编辑 更改更改为 $/BranchB/File1.txt ,从而否定更改集 92 和 104 中的编辑更改。

退出代码

运行 tf rollback 命令后,下表中的退出代码会出现。

退出代码 说明
0 该操作已成功回滚所有项。
1 该操作至少成功回滚了一个项目,但无法回滚一个或多个项。
100 操作无法回滚任何项。

示例

以下示例否定了更改集 23 对更改集中更改的所有项的影响。

c:\workspace> tf rollback /changeset:C23

以下示例否定了更改集 23 对文件 a.txt的影响。

c:\workspace> tf rollback /changeset:C23 a.txt

以下示例更改 a.txt 的内容,以匹配与更改集 23 签入的版本匹配。

c:\workspace> tf rollback /toversion:C23 a.txt

以下示例更改 OurTeamProject 的内容,以匹配在 2009 年 8 月 31 日午夜或午夜之前应用的最后一个更改集。

c:\workspace> tf rollback /toversion:D08/31/2009 /recursive $/OurTeamProject/

示例:/keepmergehistory 选项

回滚包含分支或合并更改的变更集时,通常希望同一源和同一目标之间的将来合并以包含这些更改。 但是,如果希望同一源和同一目标之间将来合并,则可以使用 /keepmergehistory 选项来排除过去合并操作中包含的更改集。

例如,可以在以下情况下使用此命令:

  1. 在 2009 年 6 月 30 日,将执行从 $/BranchA/ 到 $/BranchB/的所有项目的完整合并:

    c:\workspace> tf merge $/BranchA $/BranchB
    

    在变更集 292 中签入此合并。

  2. 在 7 月,你进行了多项更改 $/BranchA/Util.cs。 这些更改包含在更改集 297、301 和 305 中。

  3. 2009 年 8 月 1 日,将 $/BranchA/Util.cs 合并到 $/BranchB/Util.cs

    c:\workspace> tf merge $/BranchA/Util.cs $/BranchB/Util.cs
    

    在变更集 314 中签入更改。 此操作的结果是在更改集 297、301 和 305 到 $/BranchA/Util.cs 的编辑现在也应用于 $/BranchB/Util.cs

  4. 一周后,你意识到你在 7 月对 $/BranchA/Util.cs 所做的编辑不适合 $/BranchB/Util.cs。 可以使用回滚命令来否定这些更改。 使用回滚命令回滚 合并 更改或 分支 更改时,可以做出决定。

    • 如果希望 7 月对 $/BranchA/Util.cs 所做的更改在未来合并中重新应用于 $/BranchB/Util.cs ,则应键入以下命令:

      c:\workspace> tf rollback /changeset:314
      
    • 如果希望 7 月对 $/BranchA/Util.cs 所做的更改永远不会在将来的合并中重新应用于 $/BranchB/Util.cs ,则应键入以下命令:

      c:\workspace> tf rollback /changeset:314 /keepmergehistory
      
  5. 几周后,你将 $/BranchA/ 合并到 $/BranchB/

    c:\workspace> tf merge $/BranchA $/BranchB
    
    • 如果省略了 /keepmergehistory 选项,合并更改将应用于 $/BranchB/Util.cs 的所有更改集,因为更改集 292,包括 changeets 297、301、305。 换句话说,将来的合并将撤消 回滚 更改。

    • 如果包含 /keepmergehistory 选项,合并操作将应用于 $/BranchB/Util.cs 自更改集 292 以来应用于 $/BranchA/Util.cs 的所有更改集,不包括更改集 297、301 和 305。 换句话说,将来的合并不会撤消回滚更改。 因此, BranchA 上的内容可能与 BranchB 上的内容不匹配。