自动合并

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署
History
    • 流水线成功时合并流水线成功时添加到合并列车 在极狐GitLab 16.0 中重命名为 自动合并,使用名为 auto_merge_labels_mr_widget功能标志。默认启用。
    • 重命名的自动合并功能在极狐GitLab 16.0 中 GA。功能标志 auto_merge_labels_mr_widget 被移除。
    • 增强的自动合并功能引入于极狐GitLab 16.5,使用 merge_when_checks_passadditional_merge_when_checks_ready 两个功能标志。默认禁用。
    • 在极狐GitLab 17.0 中,在 JihuLab.com 上启用了功能标志 merge_when_checks_passadditional_merge_when_checks_ready
    • 在极狐GitLab 17.1 中,对 additional_merge_when_checks_ready 与标志 merge_when_checks_pass 进行了合并。
    • 合并请求的自动合并引入于极狐GitLab 17.2,使用名为 merge_when_checks_pass_merge_train功能标志。默认禁用。
    • 合并请求的自动合并在极狐GitLab 17.2 中,在 JihuLab.com 上启用。
    • 在极狐GitLab 17.4 中,在私有化部署上启用功能标志 merge_when_checks_pass。默认启用。
    • 合并请求的自动合并在极狐GitLab 17.7 中 GA。功能标志 merge_when_checks_pass_merge_train 被移除。
    • 自动合并在极狐GitLab 17.7 中 GA。功能标志 merge_when_checks_pass 被移除。

如果一个合并请求的内容已准备好合并,您可以选择 设置为自动合并。当所有必需的检查成功完成后,合并请求会自动合并,您无需记得手动合并该合并请求。

合并检查使您可以专注于审查合并请求的内容,并使用项目设置来确定其可合并性。当您审查一个合并请求时,如果您同意合并请求的更改,请将其设置为自动合并。极狐GitLab 强制执行您的项目设置,直到合并请求满足所有合并检查(如必需的代码拥有者和审批规则),否则无法合并。在满足所有必需的合并检查后,合并请求将合并,无需您进行任何操作。

合并检查包括通过的 CI/CD 流水线,以及更多内容:

  1. 必须给予所有必需的批准。
  2. 没有其他合并请求阻止此合并请求。
  3. 不存在合并冲突。
  4. 无论项目设置如何,CI/CD 流水线都必须成功完成。
  5. 所有讨论都已解决。
  6. 合并请求不是 草稿
  7. 所有外部状态检查都已通过。
  8. 合并请求必须处于打开状态。
  9. 不存在被拒绝的策略。
  10. 如果您的项目需要合并请求引用一个 Jira 议题,合并请求标题或描述中包含一个 Jira 议题链接。
  11. 如果合并请求设置了 Merge after 日期,当前时间必须晚于配置的日期。

有关检查和其 API 等效项的完整列表,请参阅合并状态

Auto-merge is ready

在您设置自动合并后,您无法更改哪些议题会在合并请求合并时自动关闭

自动合并请求#

先决条件:

  1. 您必须至少拥有项目的开发者角色。
  2. 如果项目配置要求,合并请求中的所有线程必须被解决
  3. 合并请求必须获得所有必需的批准。

要在命令行中进行此操作,请使用 merge_request.merge_when_pipeline_succeeds 推送选项

要在极狐GitLab 用户界面中执行此操作:

  1. 在左侧侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 代码 > 合并请求
  3. 选择要编辑的合并请求。
  4. 滚动到合并请求报告部分。
  5. 可选。选择您想要的合并选项,例如 删除源分支压缩提交编辑提交消息
  6. 审查合并请求小部件的内容。如果它包含一个议题关闭模式,确认议题在此工作合并时应关闭: This merge request closes issue #2754.
  7. 选择 自动合并

在您选择 自动合并 后评论合并请求,但在流水线完成之前,会阻止合并,直到您解决所有现有线程。

取消自动合并#

您可以取消合并请求的自动合并。

先决条件:

  1. 您必须是合并请求的作者,或项目成员,至少拥有开发者角色。
  2. 合并请求的流水线必须仍在进行中。

执行此操作:

  1. 在左侧侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 代码 > 合并请求
  3. 选择要编辑的合并请求。
  4. 滚动到合并请求报告部分。
  5. 选择 取消自动合并

Status

流水线成功自动合并#

如果流水线成功,合并请求会合并。如果流水线失败,作者可以重试任何失败的作业,或推送新提交以修复失败:

  1. 如果重试的作业在第二次尝试中成功,合并请求将合并。
  2. 如果您向合并请求添加新提交,极狐GitLab 会取消请求,以确保新更改在合并前得到审查。
  3. 如果您向合并请求的目标分支添加新提交,并且您的项目仅允许快速合并请求,极狐GitLab 会取消请求以防止合并冲突。

为了更严格地控制流水线状态,您还可以在合并前要求成功的流水线

要求成功的流水线用于合并#

您可以配置您的项目以要求在合并前完成并成功的流水线。此配置适用于:

  1. 极狐GitLab CI/CD 流水线。
  2. 外部 CI 集成运行的流水线。

因此,禁用极狐GitLab CI/CD 流水线不会禁用此功能,但您可以使用外部 CI 提供商的流水线。

先决条件:

  1. 确保您的项目 CI/CD 配置为每个合并请求运行流水线。
  2. 您必须至少拥有项目的维护者角色。

要启用此设置:

  1. 在左侧侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 滚动到 合并检查,并选择 流水线必须成功。此设置还会阻止合并请求在没有流水线时合并,这可能与某些规则冲突
  4. 选择 保存

如果多个流水线类型为同一个合并请求运行,合并请求流水线优先于其他流水线类型。例如,旧但成功的合并请求流水线允许合并请求合并,尽管较新的分支流水线失败。

允许在跳过的流水线后合并#

当您为项目设置 流水线必须成功 时,跳过的流水线会阻止合并请求合并。

先决条件:

  1. 您必须至少拥有项目的维护者角色。

要更改此行为:

  1. 在左侧侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 合并检查 下:
    • 选择 流水线必须成功
    • 选择 跳过的流水线被视为成功
  4. 选择 Save

防止在特定日期前合并#

History
    • 引入于极狐GitLab 17.6。

如果您的合并请求不应在特定日期和时间之前合并,请设置一个 Merge after 日期。此值设置合并(或合并列车)可以开始的时间。然而,确切的合并时间可能会有所不同,具体取决于其他合并检查的满足情况或合并列车的长度。

先决条件:

  1. 您必须至少拥有项目的开发者角色。

执行此操作:

  1. 在左侧侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 代码 > 合并请求
  3. 选择要编辑的合并请求。
  4. 选择 编辑
  5. 找到 合并时间 输入框并选择一个日期和时间。
  6. 选择 保存更改

故障排除#

合并请求无法合并,尽管没有失败的流水线#

在某些情况下,您可以要求成功的流水线用于合并,但无法合并没有失败流水线的合并请求。该设置要求存在一个成功的流水线,而不是没有失败的流水线。完全没有流水线的合并请求不被视为有成功的流水线,因此无法合并。

当您启用此设置时,使用rulesworkflow:rules确保每个合并请求运行流水线。

合并请求仍然可以合并,尽管有失败的流水线#

在某些情况下,您可以要求成功的流水线用于合并,但仍然可以合并一个失败的流水线的合并请求。

合并请求流水线在 流水线必须成功 设置中具有最高优先级。如果为同一个合并请求运行多种流水线类型,极狐GitLab 只检查合并请求流水线是否成功。

合并请求可以有多个流水线,如果:

  1. rules 配置导致重复的流水线:一个合并请求流水线和一个分支流水线。在这种情况下,最新的 合并请求 流水线的状态决定合并请求是否可以合并,而不是分支流水线。
  2. 由外部工具触发的流水线目标与合并请求相同分支。

在所有情况下,更新您的 CI/CD 配置以防止同一合并请求的多种流水线类型。