创建合并请求
- Tier: 免费版、高级版、旗舰版
- Offering: GitLab.com、GitLab 自托管、GitLab 专用
当您准备好创建合并请求时,请使用适合您工作流程的方法。GitLab UI 提供了多种创建合并请求的方式,UI 之外的方法也可用:
- 命令行,使用
glab mr命令,或结合 Git 命令 和 推送选项。 - Visual Studio Code 扩展。
- 通过发送电子邮件。
- 合并请求 API merge requests API。
为简化合并请求与分支的关联过程,请在命名分支时遵循 分支命名模式。
所有创建合并请求的方法都会强制执行您项目的 分支命名规则。
从合并请求列表中创建
您可以从合并请求列表中创建合并请求。
- 在左侧边栏,选择 搜索或跳转至 并找到您的 GitLab 项目。
- 选择 代码 > 合并请求。
- 在右上角,选择 新建合并请求。
- 选择源分支和目标分支,然后选择 比较分支并继续。
- 完成新建合并请求页面上的字段,然后选择 创建合并请求。
每个分支只能关联一个打开的合并请求。如果此分支已存在合并请求,则会显示现有合并请求的链接。
从 issue 中创建
如果您的开发流程要求每个合并请求都有一个 issue,您可以直接从 issue 创建分支以加快进程。新分支及其后续的合并请求都会标记为与此 issue 相关。合并合并请求后,issue 会自动关闭,除非 禁用了自动关闭 issue:
同时创建分支和合并请求:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 计划 > Issues 并找到您的 issue。
- 滚动到 issue 描述的底部。
- 选择 创建合并请求 > 创建合并请求和分支。
- 在对话框中,查看建议的分支名称。它基于您项目的 分支名称模板。
- 可选。如果分支名称已被占用,或者您需要不同的分支名称,请重命名它。
- 选择源分支或标签。
- 选择 创建合并请求。
从任务中创建
如果您的团队将 issue 分解为 任务,您可以直接从任务创建分支以加快进程。新分支及其后续的合并请求都会标记为与此任务相关。合并合并请求后,任务会自动关闭,除非 禁用了自动关闭 issue:
前置条件:
- 您必须拥有包含该任务的项目至少 Developer 角色。
同时创建分支和合并请求:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 计划 > Issues。
- 在 issue 列表中找到您的任务。
- 滚动到任务描述的底部。
- 选择 创建合并请求。
- 在对话框中,查看建议的分支名称。它基于您项目的 分支名称模板。
- 可选。如果分支名称已被占用,或者您需要不同的分支名称,请重命名它。
- 选择源分支或标签。
- 选择 创建合并请求。
如果您的 Git 仓库为空,GitLab 会:
- 创建一个默认分支。
- 向其提交一个空的
README.md文件。 - 创建并重定向您到基于 issue 标题的新分支。
- 如果您的项目 配置了部署服务(如 Kubernetes),GitLab 会提示您通过帮助创建
.gitlab-ci.yml文件来设置 自动部署。
如果您创建的分支名称 以任务编号为前缀,GitLab 会交叉链接 issue 和合并请求,并将 关闭模式 添加到合并请求的描述中。在大多数情况下,这看起来像 Closes #ID,其中 ID 是任务的 ID。如果您的项目配置了 关闭模式,则任务会在合并请求合并时关闭。
从 Web 编辑器中创建
当您在 Web 编辑器中执行以下操作时,可以创建合并请求:
创建分支时创建
当您创建分支时,可以创建合并请求。
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 代码 > 分支。
- 输入分支名称并选择 新建分支。
- 在文件列表上方,选择 创建合并请求。会创建一个合并请求。默认分支是目标分支。
- 填写字段并选择 创建合并请求。
在 fork 中工作时创建
您可以从您的 fork 创建合并请求,以贡献回主项目。
-
在左侧边栏,选择 搜索或跳转至 并找到您的 fork。
-
选择 代码 > 合并请求,然后选择 新建合并请求。
-
对于 源分支,选择您的 fork 中包含更改的分支。
-
对于 目标分支:
-
选择上游仓库,而不是您的 fork。如果您经常向上游贡献更改,请考虑为您的 fork 设置 默认目标。
-
从上游仓库选择一个分支:
如果您的 fork 的可见性比父仓库更严格,目标分支默认为您的 fork 的默认分支。这可以防止在您的 fork 中意外暴露私有信息。
-
-
选择 比较分支并继续。
-
选择 创建合并请求。合并请求在目标仓库中创建,而不是在您的 fork 中。
-
添加您想要的标签、里程碑、审查者和指派人。
-
选择 提交合并请求。
如果合并请求针对另一个仓库,它会使用:
- 目标项目的审批规则。
- 您的 fork 的 CI/CD 配置、资源和项目 CI/CD 变量。
要在上游项目中运行 CI/CD 管道,您必须是该项目的成员。如果您在父项目中为来自 fork 的合并请求运行合并请求管道 in the parent project,所有变量都对管道可用。
如果您不打算再做更多贡献,在您的工作合并后,取消链接您的 fork 与其上游仓库的连接。
设置默认目标项目
默认情况下,来自 fork 的合并请求目标是上游仓库,而不是您的 fork。您可以将您的 forked 仓库配置为默认目标,而不是上游仓库。
前置条件:
- 您正在 fork 中工作。
- 您必须至少拥有 Developer 角色,或者被允许在项目中创建合并请求。
- 上游仓库允许创建合并请求。
- fork 的 可见性设置 必须与上游仓库匹配,或者比上游仓库更宽松。例如:如果您的 fork 是私有的,而上游是公开的,则不会显示此设置。
要执行此操作:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 设置 > 合并请求。
- 在 目标项目 部分,选择您要用于默认目标项目的选项。
- 选择 保存更改。
通过发送电子邮件创建
您可以通过向 GitLab 发送电子邮件消息来创建合并请求。合并请求的目标分支是仓库的默认分支。
前置条件:
- 合并请求必须针对当前仓库,而不是上游仓库。
- GitLab 管理员必须配置 入站电子邮件。此设置在 GitLab.com 上已启用。
- GitLab 管理员必须配置 通过电子邮件回复。此设置在 GitLab.com 上已启用。
- 您必须至少拥有 Developer 角色,或者被允许在项目中创建合并请求。
通过发送电子邮件创建合并请求:
-
在左侧边栏,选择 搜索或跳转至 并找到您的项目。
-
选择 代码 > 合并请求。
-
如果项目包含任何合并请求,选择 通过电子邮件向此项目发送新的合并请求。
-
在对话框中,复制显示的电子邮件地址。请保持此地址私密。任何拥有它的人都可以像您一样创建 issue 或合并请求。
-
打开一封电子邮件并撰写包含以下信息的消息:
- 收件人 行是您复制的电子邮件地址。
- 主题 是源分支名称。
- 电子邮件正文是合并请求描述。
-
要添加提交,请将
.patch文件附加到消息中。 -
发送电子邮件。
会创建一个合并请求。
通过电子邮件创建合并请求时添加附件
通过将补丁作为附件添加到电子邮件中来向合并请求添加提交。
- 补丁的总大小必须为 2 MB 或更少。
- 要被视为补丁,附件的文件名必须以
.patch结尾。 - 补丁按名称顺序处理。
- 如果主题中的源分支不存在,它将从仓库的
HEAD或默认目标分支创建。要手动更改目标分支,请使用/target_branch快速操作。 - 如果源分支已存在,补丁将应用于其顶部。
故障排除
在 issue 上没有创建合并请求的选项
如果以下情况,创建合并请求 选项不会显示在 issue 上:
- 已存在同名分支。
- 此分支已存在合并请求。
- 您的项目有活动的 fork 关系。
- 您的项目是私有的,且 issue 是机密的。
要使此按钮出现,一个可能的解决方法是 移除您项目的 fork 关系。移除后,您无法恢复 fork 关系。您的项目无法再向源项目或其其他 fork 发送或接收合并请求。
电子邮件消息无法处理
当发送电子邮件创建合并请求,并且您尝试针对上游仓库时,GitLab 会响应以下错误:
很遗憾,您发送给 GitLab 的电子邮件无法处理。
您不允许执行此操作。如果您认为这是错误的,请联系工作人员。