合并命令 (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

合并命令将一个分支的更改应用到另一个分支。

注意

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

若要使用 合并 命令,必须将 “签出 ”权限设置为 “允许 包含 目标的 工作区文件夹”,并且必须具有“读取 ”权限 集以 允许 包含源的工作区文件夹。 有关详细信息,请参阅 默认 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 等值。 有关 Team Foundation 如何分析版本规范以确定其范围内的项的详细信息,请参阅 使用 Team Foundation 版本控制命令
source 指定要充当合并源的文件或文件夹。
destination 指定要充当合并目标的文件或文件夹。
username 提供 /login 选项的值。 可以将用户名值指定为 DOMAIN* UserName* 或 UserName

选项

选项

说明

/recursive

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

/force

忽略合并历史记录,并将源中的指定更改合并到目标中,即使之前已合并其中一些或全部更改也是如此。

/candidate

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

/discard

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

/version

对于选择性合并,此选项指定应合并到目标的区域。 对于追赶合并,此参数指定应合并所有未合并更改之前的版本。

对于选择性合并,版本范围表示要合并的更改集的开始和终点。 例如,如果尝试合并版本 4~6,则合并更改集 4、5 和 6。

/lock

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

锁定选项:


  • 未将锁放置在项上,并从项中删除任何现有锁。

  • 签入
    其他用户可以通过执行签入来签入来签入锁定文件,但无法签入已锁定的文件的修订。 如果任何其他用户锁定了任一指定项,则锁定操作将失败。

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

/preview

显示合并预览。

/baseless

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

注意

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

/noimplicitbaseless

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

/nosummary

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

/noprompt

禁止显示输入的任何提示。

/conservative

将一个分支合并到另一个分支时,会产生更多冲突。

/format

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

  • 简短:默认值,仅汇总冲突、警告和错误总数。
  • 详细:不仅汇总了冲突、警告和错误总数,还列出了每个冲突的详细信息。

注意

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

/login

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

注解

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

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

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

Baseless 合并

使用无基合并合并合并未直接相互分支的项目。 若要执行无基合并,必须使用 tfmerge 命令。 执行无基合并时,Team Foundation 没有有关分支中文件关系的任何信息。 在无基合并中,必须执行手动冲突解决。 执行无基合并并解决任何冲突后,Team Foundation 会记录合并历史记录,并在文件夹和文件之间建立关系。

运行 tfmerge 时,Team Foundation 会在两个以前相关的版本控制树中具有相同相对名称的项之间执行隐式无基合并。 例如,可能需要合并相关分支$SRC\ 和 $TGT。 这两个分支都包含一个名为a.txt的不相关文件。 运行 tfmerge 时,如果两个文件相同,则 Team Foundation 会在两个 a.txt文件之间建立关系,如果禁用符合 FIPS 的加密,并且源文件与目标中的其他任何文件无关。

如果运行 tf 与/noimplicitbaseless 选项集的合并,当 Team Foundation 尝试合并这两个分支时,两个a.txt文件会在尝试签入更改时创建命名空间冲突。 若要解决冲突,必须重命名其中一个文件。

示例

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

c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive

以下示例将 changeset 137 合并到 Branch2 中。

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

以下示例将所有更改集合并到 changeset 137 到 Branch2 中。

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

以下示例打印分支 1 中尚未合并到 Branch2 中的更改集的列表。

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

以下示例打印 Branch2 中尚未合并回 Branch1 的更改集列表。

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

以下示例将 changeset 137 作为合并到 Branch2 的候选项放弃。

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

以下示例将丢弃所有更改集,以更改集 137 作为合并到分支 2 的候选项。

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