回滚命令 (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
选项来排除过去合并操作中包含的更改集。 例如:
2009 年 6 月 30 日,对从 $/BranchA/ 到 $/BranchB/的所有项目进行完全合并。
c:\workspace> tf merge $/BranchA $/BranchB
将此合并签入为变更集 292 的一部分。
7 月,$/BranchA/Util.cs进行多项更改。 这些更改包含在更改集 297、301 和 305 中。
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。
一周后,你意识到你在 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
几周后,你将 $/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上的内容不匹配。