Merge 命令(Team Foundation 版本控制)

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

Visual Studio 2019 | Visual Studio 2022

tf merge 命令在 Team Foundation 版本控制 (TFVC) 中将更改从一个分支应用到另一个分支。

注意

在执行签入操作之前,此命令的结果不会反映在 Azure DevOps 服务器中。 有关详细信息,请参阅开发代码和管理挂起的更改

先决条件

要使用 merge 命令,你必须将包含 destination 的工作区文件夹的“签入”权限设置为“允许”,并且必须将包含 source 的工作区文件夹的“读取”权限设置为“允许”。 有关详细信息,请参阅默认 TFVC 权限

语法

tf merge [/recursive] [/force] [/candidate] [/discard] 
[/version:versionspec] [/lock:none|checkin|checkout] [/preview] 
[/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/format:(brief|detailed)] [/noprompt] [/login:username,[password]] source destination

参数

参数

Argument

说明

<versionspec>

/version 选项提供一个值,例如 C2。 若要详细了解 TFVC 如何分析版本规范以确定哪些项在其范围内,请参阅使用 Team Foundation 版本控制命令

<source>

指定要作为合并源的文件或文件夹。

<destination>

指定要作为合并目标的文件或文件夹。

<username>

/login 选项提供值。 可以将 username 值指定为 DOMAIN\usernameusername

选项

选项

说明

/recursive

匹配当前目录和任何子文件夹中的 source 项规范。

/force

忽略合并历史记录并将源中指定的更改合并到目标,即使之前已经合并了部分或所有这些更改。

/candidate

打印源中尚未合并到目标中的所有变更集的列表。 列表应包含尚未合并的变更集 ID 和有关该变更集的其他基本信息。 给定结果的星号表示它已部分合并,这意味着变更集中的某些更改已被合并,而其他更改尚未合并。

/discard

不执行合并操作,但更新合并历史记录以跟踪发生的合并。 这将放弃用于特定合并的变更集。

/version

对于选择性合并,此选项指定应合并到目标中的范围。 对于跟进合并,此参数指定应合并所有未合并更改之前的版本。

对于选择性合并,版本范围表示要合并的变更集的起始版本和结束版本。 例如,如果你尝试合并版本 4~6,则将合并变更集 4、5 和 6。

/lock

指定锁定类型或从某个项中移除锁定。 有关详细信息,请参阅了解锁定类型

锁定选项:

  • None:不对某个项应用锁定,并从项中移除任何现有的锁定。

  • Checkin:其他用户可以签出指定项,但在你通过执行签入来释放锁定之前,他们无法签入对锁定文件的修订。 如果任何其他用户已经锁定了任何一个指定项,锁定操作将失败。

  • Checkout:在显式释放锁定之前,阻止用户签入或签出任何一个指定项。 如果任何其他用户已经锁定了任何一个指定项或者存在针对任何项的挂起的更改,则锁定操作将失败。

/preview

显示合并的预览版。

/baseless

在没有基础版本的情况下执行合并。 也就是说,允许用户合并没有合并关系的文件和文件夹。 在无基合并之后,就存在合并关系,并且将来的合并不必是无基合并。

注意

无基合并不能删除目标中的文件。 你可以手动执行此类更改。

/noimplicitbaseless

指定 TFVC 不会在两个不相关的版本控制树中具有同一相对名称的两个项之间进行隐式无基合并。

/nosummary

省略冲突、错误和警告的摘要。

/noprompt

取消要求你提供输入的任何提示。

/conservative

在将一个分支合并到另一个分支时,将导致更多冲突。

/format

指定汇总合并冲突的格式:

  • Brief(默认值):仅汇总冲突、警告和错误的总数。
  • Detailed:不仅汇总了冲突、警告和错误的总数,还列出了有关每个冲突的详细信息。

注意

此选项仅在输出包含冲突摘要时适用。 如果使用了 /nosummary 选项或合并引起的冲突、警告和错误少于 10 个,则无法显示摘要。

/login

指定用户名和密码,以便使用 Azure DevOps 对用户进行身份验证。

注解

你可以使用 tf 命令行实用工具的 merge 命令将现有源分支中的更改应用到现有目标分支。 你可以将单个修订或完整的变更集合并到目标分支。 你可以将源分支中的更改合并到目标分支,也可以将目标分支中的更改合并到源分支。

merge 命令还允许查询源分支中尚未迁移到目标分支的更改。 此命令还允许指示某些更改将永远不会从源合并到目标,并且不应再显示为合并操作的备选项。

有关如何使用 tf 命令行实用工具的详细信息,请参阅使用 Team Foundation 版本控制命令

无基合并

使用无基合并来合并不是直接从对方分支出来的项。 要进行无基合并,你必须使用 tf merge 命令。 当你进行无基合并时,TFVC 没有任何有关分支中的文件关系的信息。 在无基合并中,你必须手动解决冲突。 在进行无基合并且解决所有冲突后,TFVC 将记录合并历史记录并在文件夹和文件之间建立关系。

运行 tf merge 时,TFVC 将在两个以前相关的版本控制树中具有同一相对名称的项之间进行隐式无基合并。 例如,你可能想要合并相关分支 $SRC$TGT。 两个分支都包含名为 a.txt 的不相关文件。 如果这两个文件相同、符合 FIPS 的加密已禁用并且源文件与目标中的任何其他文件无关,当你运行 tf merge 时,TFVC 将在这两个 a.txt 文件之间建立关系。

如果在设置了 /noimplicitbaseless 选项的情况下运行 tf merge,当 TFVC 尝试合并这两个分支时,两个 a.txt 文件将在尝试签入更改时产生命名空间冲突。 要解决冲突,你必须重命名其中一个文件。

示例

以下示例合并了 MyFile_beta1 中尚未合并到 MyFile_RTM 中的更改。

c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive

以下示例将变更集 137 合并到 branch2。

c:\projects>tf merge /version:C137~C137 branch1 branch2 /recursive

以下示例将变更集 137 之前的所有变更集合并到 branch2 中。

c:\projects>tf merge /version:C137 branch1 branch2 /recursive

以下示例打印 branch1 中尚未合并到 branch2 中的变更集列表。

c:\projects>tf merge /candidate branch1 branch2 /recursive

以下示例打印 branch2 中尚未合并回 branch1 的变更集列表。

c:\projects>tf merge /candidate branch2 branch1 /recursive

以下示例放弃将变更集 137 作为用于合并到 branch2 的备选项。

c:\projects>tf merge /discard /version:C137~C137 branch1 branch2 /recursive

以下示例放弃了变更集 137 之前的所有变更集作为用于合并到 branch2 的备选项。

c:\projects>tf merge /discard /version:C137 branch1 branch2 /recursive