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

使用此命令可以回滚一个或多个变更集对一个或多个版本控制项的影响。 此命令不从项目的版本历史记录中移除变更集。 而是,此命令创建工作区中一组挂起的更改,加入否定您指定的变更集的效果。

所需权限

若要使用此命令,必须将**“读”“签出”“签入”权限设为“允许”**。 有关更多信息,请参见 Team Foundation Server 权限

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

有关 Team Foundation 如何分析 versionspec 的详细信息,请参阅命令行语法(版本控制)

选项

说明

/changeset

使用此选项可指定要求反的一个或多个特定变更集。

/keepmergehistory

只有当一个或多个正在回滚的变更集包含 branchmerge 更改时,此选项才起作用。 指定此选项,如果您希望将来在相同的源和相同的目标之间合并,以排除您正在回滚的更改。

有关详细信息,请参阅示例:/keepmergehistory 选项。

/lock

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

锁定选项

  • 默认值。 不应用锁定。 如果您正在回滚的文件已被锁定,则此选项将移除锁定。

  • Checkin

    锁定某个项目,直至通过执行签入解除锁定。 其他用户可以签出指定项,但在您解除锁定前,他们无法签入修订。 不能锁定已经锁定的文件。

  • Checkout

    通过执行签入,阻止用户在您解除锁定之前,签入或签出锁定项。

/login

有关此选项的信息,请参见命令行选项

/noprompt

禁止显示本应在此操作过程中显示的任何对话框。

/recursive

如果想要操作包括子文件夹中的项,请指定此选项。

/toversion

指定该选项将文件恢复到其特定变更集中的状态。 使用此选项时,会消除自指定版本以来应用的所有变更集的影响。

/version

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

备注

tf rollback 命令对每个更改集的效果求反,该更改集是您为自己指定的每个项目指定的。 下表列出了该操作如何对每种更改执行求反。

如果您回滚此更改…

...进行回滚更改和以下额外的更改

addbranchundelete

delete

edit

edit

encoding

encoding

rename/move

rename/move

delete

undelete

merge

对合并到当前分支的任何更改求反的更改。

下面的列表提供了回滚命令所产生更改的一些示例:

  • 如果您正在回滚发生add 更改的变更集,则回滚操作将导致rollback更改和delete更改。

  • 如果您正在回滚发生edit更改的变更集 521,则回滚操作将导致rollback更改和对变更集 521 中的edit更改包含的更改求反的edit更改。

  • 在变更集 132 中,您从 $/BranchA/File1.txt 合并到 $/BranchB/File1.txt。 该合并中所做的更改包括 edit 变更集 92 和 104 中所作的更改。 在变更集 162 中回滚变更集 132,将导致 $/BranchB/File1.txt 的rollback更改该和edit更改,$/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 日晚上 12 点或之前应用的最后的变更集。

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. 在七月,您对 $/BranchA/Util.cs 做出了几个更改。 这些更改包含在变更集 297、301 和 305 中。

  3. 在 2009 年 8 月 1 日,您将 $ / BranchB/Util.cs 合并至 $/BranchA/Util.cs:

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

    您将更改签入为变更集 314 的一部分。 此操作的结果是对 $/BranchA/Util.cs 中 297、301,和 305 变更集所做的编辑现在也可应用于 $/BranchB/Util.cs。

  4. 一周以后,您发现 7 月对 $/BranchA/Util.cs 对所做的编辑不适合 $/BranchB/Util.cs。 可以使用回滚命令求反这些更改。 当使用回滚命令回滚 merge 更改或 branch 更改时,您可以作出决策。

    • 如果希望 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 选项,则merge更改将应用于 $/BranchB/Util.cs 所有变更集,这些变更集将应用到变更集 292 之后的 $/BranchA/Util.cs,包括变更集 297、301 和 305。 换言之,将来的合并将会撤消rollback更改。

    • 如果包含 /keepmergehistory 选项,合并操作将应用于 $/BranchB/Util.cs 所有变更集,这些变更集将应用到变更集 292 之后的 $/BranchA/Util.cs,变更集 297、301 和 305 除外。 换言之,将来的合并不会撤消回滚更改。 因此,BranchA 中的内容可能与 BranchB 中的内容不匹配。

请参见

参考

Merge 命令

概念

只能通过命令行执行的操作(Team Foundation 版本控制)

其他资源

Tf 命令行实用工具命令