合并请求

  • 侧边栏操作菜单在极狐GitLab 16.0 中发生了变更,现也包含了对议题、事件和史诗的操作。
  • 在极狐GitLab 16.9 中全面可用。相关功能发,功能标志 moved_mr_sidebar 被移除。

合并请求(MR)是一个将源分支的更改合并到目标分支的提案。

当你打开一个合并请求时,你可以在合并之前可视化并协作处理更改。合并请求包括:

  • 请求的描述。
  • 代码更改和内联代码审查。
  • 有关 CI/CD 管道的信息。
  • 用于讨论的评论区。
  • 提交的列表。

创建合并请求

了解各种方式来创建合并请求

使用合并请求模板

当你创建一个合并请求时,GitLab 会检查是否存在描述模板来向你的合并请求添加数据。GitLab 会按照从 1 到 5 的顺序检查以下位置,并将找到的第一个模板应用到你的合并请求:

名称 项目 UI
设置

default.md
实例
default.md
项目
default.md
无模板
标准提交消息 1 2 3 4 5
使用议题关闭模式的提交消息,如 Closes #1234 1 2 3 4 5 *
议题 ID 为前缀的分支名称,如 1234-example 1 * 2 * 3 * 4 * 5 *
note 带星号(*)标记的条目还会附加一个议题关闭模式

查看合并请求

你可以查看属于你的、项目的或组的合并请求。

::Tabs

:::TabTitle 分配给你的

要查看所有分配给你的合并请求,使用 Shift + m 键盘快捷键,或者:

  1. 在左侧边栏,选择 搜索或前往
  2. 从下拉列表中,选择 分配给我的合并请求

或者:

  1. 在左侧边栏,选择 代码 > 合并请求 ( ).
  2. 从下拉列表中,选择 已分配

:::TabTitle 对于一个项目

要查看一个项目的所有合并请求:

  1. 在左侧边栏,选择 搜索或前往 并找到你的项目。
  2. 选择 代码 > 合并请求

或者,使用 键盘快捷键,按 g + m

:::TabTitle 对于组中的所有项目

要查看组中所有项目的合并请求:

  1. 在左侧边栏,选择 搜索或前往 并找到你的组。
  2. 选择 代码 > 合并请求

如果你的组包含子组,这个视图也会显示来自子组项目的合并请求。

::EndTabs

筛选合并请求列表

  • source-branch 筛选引于极狐GitLab 16.6。
  • merged-by 筛选引入于极狐GitLab 16.9。当功能标志 mr_merge_user_filter 启用时可用。
  • merged-by 筛选正式发布于极狐GitLab 17.0。移除了功能标志 mr_merge_user_filter

要筛选合并请求列表:

  1. 在左侧边栏,选择 搜索或前往 并找到你的项目。
  2. 选择 代码 > 合并请求
  3. 在合并请求列表上方,选择 搜索或筛选结果
  4. 从下拉列表中选择你想要筛选的属性。以下是一些示例:
    • 按环境或部署日期
    • ID:输入筛选条件 #30,只返回合并请求 30。
    • 用户筛选:输入(或从下拉列表中选择)以下任何筛选器,显示用户列表:
      • Approved-By,已由某用户批准的合并请求。仅限 Premium 和 Ultimate 版本。
      • Approver,此用户有资格批准的合并请求。 (有关更多信息,请阅读 代码所有者)。仅限 Premium 和 Ultimate 版本。
      • Merged-By,由该用户合并的合并请求。
      • Reviewer,已被该用户审核的合并请求。
  5. 选择或输入用于筛选属性的运算符。以下运算符可用:
    • =: 等于
    • !=: 不等于
  6. 输入用于筛选属性的文本。 某些属性可以通过 NoneAny 来筛选。
  7. 重复此过程以按更多属性筛选,通过逻辑 AND 将它们连接。
  8. 选择 排序方向,可以选择 为降序,或 为升序。

按环境或部署日期筛选

要按部署数据筛选合并请求(例如环境或日期),可以输入(或从下拉列表中选择)以下内容:

  • Environment(环境)
  • Deployed-before(部署之前)
  • Deployed-after(部署之后)
note 使用 快速前进合并方法 的项目不会返回结果,因为该方法不会创建合并提交。

当按环境筛选时,将显示一个下拉列表,列出你可以选择的所有环境。

当按 Deployed-beforeDeployed-after 筛选时:

  • 日期是指合并提交触发的环境部署成功完成的时间。
  • 你必须手动输入部署日期。
  • 部署日期使用格式 YYYY-MM-DD。如果你想指定日期和时间,需将其用双引号 (") 包裹(例如 "YYYY-MM-DD HH:MM")。

向合并请求添加更改

如果你有权限向合并请求添加更改,可以通过以下几种方式将更改添加到现有的合并请求中。具体选择哪种方式取决于更改的复杂性以及你是否需要访问开发环境:

将用户分配给合并请求

要将合并请求分配给用户,可以在合并请求的文本框中使用 /assign @user 快捷操作,或者按照以下步骤操作:

  1. 在左侧边栏,选择 Search or go to 并找到你的项目。
  2. 选择 Code > Merge requests 并找到你的合并请求。
  3. 在右侧边栏,展开并找到 Assignees 部分。
  4. 选择 Edit
  5. 搜索你想要分配的用户,并选择该用户。GitLab Free 版本每个合并请求只允许一个 assignee,而 GitLab Premium 和 GitLab Ultimate 版本支持多个 assignees:

    两个 assignee 的合并请求边栏

极狐GitLab 会将合并请求添加到该用户的 Assigned merge requests 页面中。

合并合并请求

合并请求审查过程中,审查人员会对你的更改提供反馈。当审查人员对更改满意时,他们可以启用 自动合并,即使有些合并检查未通过。在所有合并检查通过后,合并请求会自动合并,无需你进一步操作。

默认的合并权限:

  • 默认分支,通常是 main,是受保护的。
  • 只有 Maintainer 和更高角色的用户才能合并到默认分支。
  • Developer 角色的用户可以合并指向非受保护分支的任何合并请求。

要确定你是否有权限合并特定的合并请求,GitLab 会检查:

关闭合并请求

如果你决定永久停止对合并请求的工作,可以选择关闭它,而不是 删除它

前提条件:

  • 你必须是合并请求的作者或已分配的人员,或
  • 你必须在项目中具有 Developer、Maintainer 或 Owner 角色

在项目中关闭合并请求:

  1. 在左侧边栏,选择 Search or go to 并找到你的项目。
  2. 选择 Code > Merge requests 并找到你的合并请求。
  3. 滚动到页面底部的评论框。
  4. 在评论框后,选择 Close merge request

GitLab 会关闭合并请求,但会保留该合并请求的记录、评论和任何关联的流水线。

在合并时删除源分支

你可以在合并请求时删除源分支:

  • 在创建合并请求时,选择 Delete source branch when merge request accepted
  • 在合并合并请求时,如果你具有 Maintainer 角色,选择 Delete source branch

管理员可以在项目设置中将此选项设为默认值。

删除源分支的操作由设置自动合并或合并合并请求的用户执行。如果该用户没有正确的角色,例如在一个 forked 项目中,源分支删除将失败。

在目标分支合并时更新合并请求

合并请求通常是连锁的,一个合并请求依赖于另一个合并请求中添加或更改的代码。为了支持保持每个合并请求的小巧,GitLab 可以在目标分支合并到 main 时,更新多达四个打开的合并请求。例如:

  • 合并请求 1:将 feature-alpha 合并到 main
  • 合并请求 2:将 feature-beta 合并到 feature-alpha

如果这些合并请求同时打开,并且合并请求 1 (feature-alpha) 合并到 main,GitLab 会将合并请求 2 的目标分支从 feature-alpha 更新为 main

具有相互关联内容更新的合并请求通常以以下方式处理:

  • 合并请求 1 首先合并到 main,然后合并请求 2 会重新定向到 main
  • 合并请求 2 合并到 feature-alpha,更新后的合并请求 1 现在包含 feature-alphafeature-beta 的内容,最终合并到 main

此功能仅在合并请求被合并时有效。合并后选择 删除源分支 不会重新定向打开的合并请求。

合并请求工作流

软件开发人员在团队中的工作流:

  1. 你检出一个新的分支,并通过合并请求提交你的更改。
  2. 你收集团队的反馈。
  3. 你优化代码实现,通过 代码质量报告 进行检查。
  4. 你通过 GitLab CI/CD 中的 单元测试报告 验证你的更改。
  5. 你避免使用与项目许可不兼容的依赖项,通过 许可证审批策略 实现。
  6. 你请求 经理批准
  7. 你的经理:
    1. 推送一个提交,包含他们的最终审查。
    2. 批准合并请求
    3. 将其设置为 自动合并(以前为 Pipeline 成功时合并)。
  8. 你的更改通过 GitLab CI/CD 的 手动作业 部署到生产环境。
  9. 你的实现成功交付给客户。

为公司网站编写网页的 Web 开发人员的工作流:

  1. 你检出一个新的分支,并通过合并请求提交一个新页面。
  2. 你收集审核者的反馈。
  3. 你通过 审阅应用 预览你的更改。
  4. 你请求你的网页设计师进行实现。
  5. 你请求 经理批准
  6. 批准后,GitLab:
  7. 你的生产团队通过 cherry-pick 合并提交到生产环境。

在合并请求中过滤活动

  • 在极狐GitLab 15.11 中引入 带有标志 mr_activity_filters。默认情况下禁用。
  • 在极狐GitLab 16.0 中在 JihuLab.com 启用。
  • 在极狐GitLab 16.3 中在私有化部署版本中默认启用。
  • 在极狐GitLab 16.5 中 GA,移除 mr_activity_filters 功能标志。
  • 在极狐GitLab 16.9 中引入过滤机器人评论。

要了解合并请求的历史,可以过滤其活动流,只显示与您相关的项。

  1. 在左侧边栏,选择 搜索或进入 并找到您的项目。
  2. 选择 代码 > 合并请求
  3. 选择一个合并请求。
  4. 滚动到 活动 部分。
  5. 在页面右侧,选择 活动过滤器,以显示过滤选项。 如果您已经选择了过滤选项,此字段将显示您的选择摘要,例如 活动 + 5个更多
  6. 选择您希望查看的活动类型。选项包括:

    • 指派和审阅者
    • 批准
    • 评论(来自机器人)
    • 评论(来自用户)
    • 提交和分支
    • 编辑
    • 标签
    • 锁定状态
    • 提及
    • 合并请求状态
    • 跟踪
  7. 可选。选择 排序 )来反转排序顺序。

您的选择将在所有合并请求中保持。您也可以通过点击右侧的排序按钮来更改排序顺序。

解决合并请求中的讨论线程

当您想结束合并请求中的对话时,您可以 解决一个讨论线程

GitLab 会在合并请求的右上角显示未解决的线程数量,例如:7 个未解决的线程

将所有未解决的线程移动到议题

如果您有多个未解决的线程,可以创建一个议题来单独解决它们:

  1. 在左侧边栏,选择 搜索或进入 并找到您的项目。
  2. 选择 代码 > 合并请求,并找到您的合并请求。
  3. 在合并请求中,右上角找到 未解决的线程 下拉列表,选择 线程选项 ( )。
  4. 选择 用新议题解决所有议题
  5. 填写新议题的字段,并选择 创建议题

GitLab 会将所有线程标记为已解决,并在合并请求中添加一个链接,指向新创建的议题。

将一个未解决的线程移动到议题

如果您只有一个特定的未解决线程,可以创建一个议题来单独解决它:

  1. 在左侧边栏,选择 搜索或进入 并找到您的项目。
  2. 选择 代码 > 合并请求,并找到您的合并请求。
  3. 在合并请求中,找到您想要移动的线程。
  4. 在该线程的最后回复下,选择 解决线程 旁边的 创建议题解决线程 ( )。
  5. 填写新议题的字段,并选择 创建议题

GitLab 会将该线程标记为已解决,并在合并请求中添加一个链接,指向新创建的议题。

在所有线程解决之前防止合并

您可以防止合并请求在线程未解决时进行合并。当启用此设置时,如果至少有一个线程未解决,合并请求中的 未解决的线程 计数器将显示为橙色。

  1. 在左侧边栏,选择 搜索或进入 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 合并检查 部分,选择 必须解决所有线程 复选框。
  4. 选择 保存更改

当线程变得过时时自动解决合并请求中的线程

您可以设置合并请求,在新推送更改描述的行时,自动解决线程。

  1. 在左侧边栏,选择 搜索或进入 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 合并选项 部分,选择 当合并请求 diff 线程变得过时时自动解决线程
  4. 选择 保存更改

现在,如果推送使 diff 部分过时,线程将自动解决。未更改的行以及顶级可解决的线程不会被自动解决。

移动通知和待办事项

  • 在极狐GitLab 16.5 中引入 带有功能标志,名为 notifications_todos_buttons。默认禁用。
  • 议题、事件和史诗也已更新。
在极狐GitLab 私有化部署版本中,默认情况下此功能不可用。要启用此功能,管理员可以 启用功能标志,名为 notifications_todos_buttons

启用此功能标志后,通知和待办事项按钮会移动到页面的右上角。

  • 在合并请求中,这些按钮显示在选项卡的最右侧。
  • 议题、事件和史诗中,这些按钮显示在右侧边栏的顶部。

相关主题