创建合并请求

GitLab 提供了多种不同的方式来创建合并请求,包括通过 使用 Git 命令

note 极狐GitLab 强制执行 分支命名规则 以防止出现问题,并提供 分支命名模式 来简化合并请求的创建。

从合并请求列表创建

你可以从合并请求列表中创建一个合并请求。

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

每个分支只能与一个打开的合并请求关联。如果该分支已经存在合并请求,将显示指向现有合并请求的链接。

从议题创建

如果您的开发工作流要求每个合并请求都有一个议题,您可以直接从议题创建分支,以加速这一过程。新的分支,稍后它的合并请求,将被标记为与该议题相关。合并请求合并后,议题会自动关闭,除非禁用自动关闭议题

::Tabs

:::TabTitle 合并请求和分支

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

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

:::TabTitle 仅创建分支

仅从议题创建分支:

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

::EndTabs

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

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

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

从任务创建

  • 引入于极狐GitLab 17.8。

如果您的团队将议题分解为任务,您可以直接从任务创建分支,以加速这一过程。新的分支,稍后它的合并请求,将被标记为与该任务相关。合并请求合并后,任务会自动关闭,除非禁用自动关闭议题

前提条件:

  • 您必须至少拥有该任务所在项目的开发者角色。

::Tabs

:::TabTitle 合并请求和分支

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

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

:::TabTitle 仅创建分支

仅从任务创建分支:

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

::EndTabs

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

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

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

当您添加、编辑或上传文件时

您可以在向仓库添加、编辑或上传文件时创建合并请求。

  1. 添加、编辑或上传文件到仓库。
  2. 提交信息 中,输入提交的原因。
  3. 选择 目标分支,或者通过输入分支名称来创建新分支。
  4. 选择 使用这些更改创建新的合并请求 复选框或切换按钮。仅当目标分支与源分支不同时,或源分支是受保护的时,此复选框或切换按钮才会显示。
  5. 选择 上传文件
  6. 填写字段并选择 创建合并请求

当您创建分支时

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

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

当您在一个 Fork 中工作时

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

  1. 在左侧边栏中,选择 搜索或前往,然后找到您的 Fork。
  2. 选择 代码 > 合并请求,并选择 新建合并请求
  3. 对于 源分支,选择您 Fork 中包含更改的分支。
  4. 对于 目标分支

    1. 选择目标项目。(确保选择上游项目,而不是您的 Fork。)
    2. 从上游仓库中选择一个分支。
    note 如果您经常向上游项目贡献更改,建议为您的 Fork 设置一个默认目标项目
  5. 选择 比较分支并继续
  6. 选择 创建合并请求。合并请求将创建在目标项目中,而不是您的 Fork 中。

工作合并后,如果您不打算再做更多贡献,可以解除 Fork 与上游项目的关联

更多信息,请参见分支工作流文档

设置默认目标项目

默认情况下,从 Fork 创建的合并请求将目标设置为上游项目,而不是 Fork 的项目。

您可以将您的 Fork 项目配置为默认目标,而不是上游项目。

前提条件:

  • 您在一个 Fork 中工作。
  • 您必须至少拥有开发者角色,或者被允许在项目中创建合并请求。
  • 上游项目允许创建合并请求。
  • Fork 的可见性设置必须与上游仓库匹配,或者不严格于上游仓库。例如:如果您的 Fork 是私有的,而上游是公开的,那么此设置不会显示。

操作步骤:

  1. 在左侧边栏中,选择 搜索或前往,然后找到您的项目。
  2. 选择 设置 > 合并请求
  3. 目标项目 部分,选择您希望用于默认目标项目的选项。
  4. 选择 保存更改

通过发送电子邮件

您可以通过发送电子邮件到极狐GitLab 来创建合并请求。合并请求的目标分支是项目的默认分支。

前提条件:

  • 合并请求必须针对当前项目,而不是上游项目。
  • 必须由极狐GitLab 管理员配置 传入邮件
  • 必须由极狐GitLab 管理员配置 电子邮件回复
  • 您必须至少拥有开发者角色,或者被允许在项目中创建合并请求。

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

  1. 在左侧边栏中,选择 搜索或前往,然后找到您的项目。
  2. 选择 代码 > 合并请求
  3. 如果项目包含任何合并请求,选择 通过电子邮件向该项目发送新合并请求
  4. 在对话框中,复制显示的电子邮件地址。请保密此地址。任何拥有该地址的人都可以像您一样创建问题或合并请求。
  5. 打开电子邮件并编写包含以下信息的邮件:

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

合并请求已创建。

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

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

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

故障排除

无法在问题上创建合并请求的选项

如果以下情况之一发生,问题上将不显示 创建合并请求 选项:

  • 已经存在相同名称的分支。
  • 已经存在针对该分支的合并请求。
  • 您的项目存在活动的 Fork 关系。
  • 您的项目是私有的,且问题是机密的。

要使此按钮显示,一个可能的解决方法是删除项目的 Fork 关系。删除后,无法恢复 Fork 关系。此项目将无法再从源项目或其他 Fork 接收或发送合并请求。

无法处理电子邮件消息

当您发送电子邮件以创建合并请求,并尝试将目标设为上游项目时,GitLab 会响应以下错误:

抱歉,您的电子邮件消息无法处理。

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