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

Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 |Visual Studio 2022

可以使用 Team Foundation 版本控制(TFVC)tf rollback 命令回滚一个或多个更改集对一个或多个版本控制项的影响。 此命令不会从项的版本历史记录中删除更改集。 相反,此命令会在工作区中创建一组挂起的更改,以否定你指定的更改集的影响。

先决条件

若要使用此命令,请让 读取签出,并将 签入 权限设置为 “允许”。 有关详细信息,请参阅 默认 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]]

参数

参数

参数

说明

<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 版本控制命令

注意

可以指定多个 itemspec 参数。

<VersionSpec>

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

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

  • 单个更改集,例如 /toversion:C32
  • 午夜的日期,例如 /toversion:D06/19/09
  • 日期和时间,例如 /toversion:D06/19/09T14:32
  • 标签,例如 /toversion:LTestLabel
  • 映射到当前目录的工作区中的版本,/toversion:W
  • 特定工作区中的版本,例如 /toversion:WResolveRIConflicts;AKerry

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

选项

选项

说明

/changeset

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

/keepmergehistory

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

/lock

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

锁定选项:

  • None。 违约。 未应用锁。 如果回滚的文件已被锁定,此选项将删除该锁。
  • Checkin。 通过执行签入,锁定项目,直到释放锁。 其他用户可以签出指定的项,但在删除锁定之前,用户无法签入修订。 无法锁定已锁定的文件。
  • Checkout。 防止用户签入或签出锁定的项目,直到通过签入来删除锁定。

/login

有关此选项的信息,请参阅 使用选项来修改命令的方式。

/noprompt

使用此选项可禁止显示此操作期间出现的任何对话框。

/recursive

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

/toversion

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

/version

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

言论

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

回滚的更改类型 回滚更改的类型
添加分支取消删除 删除
编辑 编辑
编码 编码
重命名/移动 重命名/移动
删除 取消删除
合并 更改会否定合并到 Current Branch 的任何更改。

以下列表提供了 rollback 命令产生的一些更改示例:

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

  • 回滚发生 编辑 更改的更改集 521。 回滚操作会导致 回滚 更改,以及 编辑 更改,从而否定更改集 521 中的 编辑 更改。

  • 在变更集 132 中,你已从 $/BranchA/File1.txt 合并到 $/BranchB/File1.txt。 合并中的更改包括 编辑 更改集 92 和 104 中的更改。 在变更集 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。 可以使用 rollback 命令来否定这些更改。 使用 rollback 命令回滚 合并 更改或 分支 更改时,可以做出决定。

    • 如果要在 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 选项,则 合并 更改适用于自更改集 292 以来应用于 $/BranchA/Util.cs 的所有更改集,包括更改集 297、301 和 305 $/BranchB/Util.cs。 换句话说,合并将撤消回滚更改。

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