Help us learn about your current experience with the documentation. Take the survey.

创建合并请求

  • Tier: 免费版、高级版、旗舰版
  • Offering: GitLab.com、GitLab 自托管、GitLab 专用

当您准备好创建合并请求时,请使用适合您工作流程的方法。GitLab UI 提供了多种创建合并请求的方式,UI 之外的方法也可用:

为简化合并请求与分支的关联过程,请在命名分支时遵循 分支命名模式

所有创建合并请求的方法都会强制执行您项目的 分支命名规则

从合并请求列表中创建

您可以从合并请求列表中创建合并请求。

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的 GitLab 项目。
  2. 选择 代码 > 合并请求
  3. 在右上角,选择 新建合并请求
  4. 选择源分支和目标分支,然后选择 比较分支并继续
  5. 完成新建合并请求页面上的字段,然后选择 创建合并请求

每个分支只能关联一个打开的合并请求。如果此分支已存在合并请求,则会显示现有合并请求的链接。

从 issue 中创建

如果您的开发流程要求每个合并请求都有一个 issue,您可以直接从 issue 创建分支以加快进程。新分支及其后续的合并请求都会标记为与此 issue 相关。合并合并请求后,issue 会自动关闭,除非 禁用了自动关闭 issue

同时创建分支和合并请求:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 计划 > Issues 并找到您的 issue。
  3. 滚动到 issue 描述的底部。
  4. 选择 创建合并请求 > 创建合并请求和分支
  5. 在对话框中,查看建议的分支名称。它基于您项目的 分支名称模板
  6. 可选。如果分支名称已被占用,或者您需要不同的分支名称,请重命名它。
  7. 选择源分支或标签。
  8. 选择 创建合并请求

从任务中创建

如果您的团队将 issue 分解为 任务,您可以直接从任务创建分支以加快进程。新分支及其后续的合并请求都会标记为与此任务相关。合并合并请求后,任务会自动关闭,除非 禁用了自动关闭 issue

前置条件:

  • 您必须拥有包含该任务的项目至少 Developer 角色。

同时创建分支和合并请求:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 计划 > Issues
  3. 在 issue 列表中找到您的任务。
  4. 滚动到任务描述的底部。
  5. 选择 创建合并请求
  6. 在对话框中,查看建议的分支名称。它基于您项目的 分支名称模板
  7. 可选。如果分支名称已被占用,或者您需要不同的分支名称,请重命名它。
  8. 选择源分支或标签。
  9. 选择 创建合并请求

如果您的 Git 仓库为空,GitLab 会:

  • 创建一个默认分支。
  • 向其提交一个空的 README.md 文件。
  • 创建并重定向您到基于 issue 标题的新分支。
  • 如果您的项目 配置了部署服务(如 Kubernetes),GitLab 会提示您通过帮助创建 .gitlab-ci.yml 文件来设置 自动部署

如果您创建的分支名称 以任务编号为前缀,GitLab 会交叉链接 issue 和合并请求,并将 关闭模式 添加到合并请求的描述中。在大多数情况下,这看起来像 Closes #ID,其中 ID 是任务的 ID。如果您的项目配置了 关闭模式,则任务会在合并请求合并时关闭。

从 Web 编辑器中创建

当您在 Web 编辑器中执行以下操作时,可以创建合并请求:

创建分支时创建

当您创建分支时,可以创建合并请求。

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 代码 > 分支
  3. 输入分支名称并选择 新建分支
  4. 在文件列表上方,选择 创建合并请求。会创建一个合并请求。默认分支是目标分支。
  5. 填写字段并选择 创建合并请求

在 fork 中工作时创建

您可以从您的 fork 创建合并请求,以贡献回主项目。

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的 fork。

  2. 选择 代码 > 合并请求,然后选择 新建合并请求

  3. 对于 源分支,选择您的 fork 中包含更改的分支。

  4. 对于 目标分支

    1. 选择上游仓库,而不是您的 fork。如果您经常向上游贡献更改,请考虑为您的 fork 设置 默认目标

    2. 从上游仓库选择一个分支:

      选择分支

    如果您的 fork 的可见性比父仓库更严格,目标分支默认为您的 fork 的默认分支。这可以防止在您的 fork 中意外暴露私有信息。

  5. 选择 比较分支并继续

  6. 选择 创建合并请求。合并请求在目标仓库中创建,而不是在您的 fork 中。

  7. 添加您想要的标签、里程碑、审查者和指派人。

  8. 选择 提交合并请求

如果合并请求针对另一个仓库,它会使用:

  • 目标项目的审批规则。
  • 您的 fork 的 CI/CD 配置、资源和项目 CI/CD 变量。

要在上游项目中运行 CI/CD 管道,您必须是该项目的成员。如果您在父项目中为来自 fork 的合并请求运行合并请求管道 in the parent project,所有变量都对管道可用。

如果您不打算再做更多贡献,在您的工作合并后,取消链接您的 fork 与其上游仓库的连接。

设置默认目标项目

默认情况下,来自 fork 的合并请求目标是上游仓库,而不是您的 fork。您可以将您的 forked 仓库配置为默认目标,而不是上游仓库。

前置条件:

  • 您正在 fork 中工作。
  • 您必须至少拥有 Developer 角色,或者被允许在项目中创建合并请求。
  • 上游仓库允许创建合并请求。
  • fork 的 可见性设置 必须与上游仓库匹配,或者比上游仓库更宽松。例如:如果您的 fork 是私有的,而上游是公开的,则不会显示此设置。

要执行此操作:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 目标项目 部分,选择您要用于默认目标项目的选项。
  4. 选择 保存更改

通过发送电子邮件创建

您可以通过向 GitLab 发送电子邮件消息来创建合并请求。合并请求的目标分支是仓库的默认分支。

前置条件:

  • 合并请求必须针对当前仓库,而不是上游仓库。
  • GitLab 管理员必须配置 入站电子邮件。此设置在 GitLab.com 上已启用。
  • GitLab 管理员必须配置 通过电子邮件回复。此设置在 GitLab.com 上已启用。
  • 您必须至少拥有 Developer 角色,或者被允许在项目中创建合并请求。

通过发送电子邮件创建合并请求:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。

  2. 选择 代码 > 合并请求

  3. 如果项目包含任何合并请求,选择 通过电子邮件向此项目发送新的合并请求

  4. 在对话框中,复制显示的电子邮件地址。请保持此地址私密。任何拥有它的人都可以像您一样创建 issue 或合并请求。

  5. 打开一封电子邮件并撰写包含以下信息的消息:

    • 收件人 行是您复制的电子邮件地址。
    • 主题 是源分支名称。
    • 电子邮件正文是合并请求描述。
  6. 要添加提交,请将 .patch 文件附加到消息中。

  7. 发送电子邮件。

会创建一个合并请求。

通过电子邮件创建合并请求时添加附件

通过将补丁作为附件添加到电子邮件中来向合并请求添加提交。

  • 补丁的总大小必须为 2 MB 或更少。
  • 要被视为补丁,附件的文件名必须以 .patch 结尾。
  • 补丁按名称顺序处理。
  • 如果主题中的源分支不存在,它将从仓库的 HEAD 或默认目标分支创建。要手动更改目标分支,请使用 /target_branch 快速操作
  • 如果源分支已存在,补丁将应用于其顶部。

故障排除

在 issue 上没有创建合并请求的选项

如果以下情况,创建合并请求 选项不会显示在 issue 上:

  • 已存在同名分支。
  • 此分支已存在合并请求。
  • 您的项目有活动的 fork 关系。
  • 您的项目是私有的,且 issue 是机密的。

要使此按钮出现,一个可能的解决方法是 移除您项目的 fork 关系。移除后,您无法恢复 fork 关系。您的项目无法再向源项目或其其他 fork 发送或接收合并请求。

电子邮件消息无法处理

当发送电子邮件创建合并请求,并且您尝试针对上游仓库时,GitLab 会响应以下错误:

很遗憾,您发送给 GitLab 的电子邮件无法处理。

您不允许执行此操作。如果您认为这是错误的,请联系工作人员。