合并请求

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署
History
    • 侧边栏操作菜单已在极狐GitLab 16.0 更改,现在还可用于处理议题、事件和史诗的相关操作。
    • 在极狐GitLab 16.9 中 GA。功能标志 moved_mr_sidebar 被移除。

合并请求提供了一个中心位置,方便您的团队审查代码、进行讨论和跟踪代码变更。为了帮助描述更改的原因,您可以将合并请求链接到一个议题,并在合并请求合并后自动关闭该议题。

合并请求帮助确保主题专家审查您的建议更改,并满足您组织的安全要求。当您在开发过程的早期创建合并请求时,您的团队有时间发现错误和代码质量问题。

查看合并请求时,您会看到:

  1. 请求的描述。
  2. 代码更改和内联代码审查。
  3. 关于 CI/CD 流水线的信息。
  4. 可合并性报告。
  5. 评论。
  6. 提交列表。

创建合并请求#

了解创建合并请求的各种方法。

使用合并请求模板#

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

名称项目 UI
设置
群组
default.md
实例
default.md
项目
default.md
无模板
标准提交消息12345
带有议题关闭模式的提交消息,如 Closes #123412345 *
分支名称以议题 ID 为前缀,如 1234-example1 *2 *3 *4 *5 *

标记有星号 (*) 的项也附加了议题关闭模式

查看合并请求#

您可以查看您项目、群组或您自己的合并请求。

要在主页上查看所有合并请求,请使用 Shift + m 键盘快捷键,或:

  1. 在左侧边栏,选择 合并请求 图标。

或:

  1. 在左侧边栏,选择 搜索或转到
  2. 从下拉列表中,选择 合并请求

筛选合并请求列表#

History
    • 通过 source branch 过滤引入于极狐GitLab 16.6。
    • 通过 merged by 过滤引入于极狐GitLab 16.9。仅当启用 mr_merge_user_filter 功能标志时可用。
    • 通过 merged by 过滤在极狐GitLab 17.0 中 GA。功能标志 mr_merge_user_filter 被移除。

要筛选合并请求列表:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 代码 > 合并请求
  3. 在合并请求列表上方,选择 搜索或筛选结果
  4. 从下拉列表中,选择您希望筛选的属性。一些示例:
    • 按环境或部署日期
    • ID:输入筛选器 #30 以仅返回合并请求 30。
    • 用户筛选器:键入(或从下拉列表中选择)以下任何筛选器以显示用户列表:
      • 已批准人,用于已经由用户批准的合并请求。仅限专业版和旗舰版。
      • 可批准人,用于此用户有资格批准的合并请求。(有关更多信息,请阅读关于代码所有者)。仅限专业版和旗舰版。
      • 合并人,用于由此用户合并的合并请求。
      • 审查人,用于由此用户审查的合并请求。
  5. 选择或键入用于筛选属性的运算符。可用的运算符包括:
    • =: 是
    • !=: 不是
  6. 输入要按属性筛选的文本。您可以通过 任意 筛选某些属性。
  7. 重复此过程以按更多属性筛选,并通过逻辑 AND 连接。
  8. 选择一个 排序方向,可以是 降序,或 升序。

按环境或部署日期#

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

  • 环境
  • 部署前
  • 部署后

使用 fast-forward merge method 的项目不会返回结果,因为此方法不会创建合并提交。

按环境筛选时,会出现一个下拉列表,您可以从中选择所有可用环境。

Deployed beforeDeployed after 筛选时:

  • 日期是指部署到环境(由合并提交触发)成功完成的时间。
  • 您必须手动输入部署日期。
  • 部署日期使用格式 YYYY-MM-DD。如果要同时指定日期和时间,请用双引号(")将其括起来("YYYY-MM-DD HH:MM")。

向合并请求添加更改#

如果您有权限向合并请求添加更改,则可以通过多种方式将更改添加到现有合并请求中。这些方式取决于您更改的复杂性,以及您是否需要访问开发环境:

  • 使用浏览器中的 . 键盘快捷键Web IDE 中编辑更改。使用这种基于浏览器的方法可以编辑多个文件,或者如果您不熟悉 Git 命令。您无法从 Web IDE 运行测试。
  • 如果您需要一个功能齐全的环境来编辑文件并在之后运行测试,请在 Gitpod 中编辑更改。
  • 如果您熟悉 Git 和命令行,请从命令行推送更改

将用户分配到合并请求#

要将合并请求分配给用户,请在合并请求的文本区域中使用 /assign @user 快捷操作,或:

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

  2. 选择 Code > 合并请求 并找到您的合并请求。

  3. 在右侧边栏,展开右侧边栏并找到 Assignees 部分。

  4. 选择 Edit

  5. 搜索您想要分配的用户,并选择该用户。极狐GitLab 基础版允许每个合并请求只有一个分配者,但极狐GitLab 专业版和旗舰版允许多个分配者:

    Two assignees for merge requests sidebar

极狐GitLab 将合并请求添加到用户的 Assigned 合并请求 页面。

合并合并请求#

合并请求审查流程中,审查者会对您的更改提供反馈。当审查者对更改感到满意时,他们可以启用自动合并,即使某些合并检查失败。一旦所有合并检查通过,合并请求会自动合并,无需您进一步操作。

默认合并权限:

  • 默认分支,通常是 main,受到保护。
  • 只有维护者及更高角色可以合并到默认分支。
  • 开发人员可以合并任何目标为非保护分支的合并请求。

要确定您是否有权限合并特定合并请求,极狐GitLab 会检查:

  • 您在项目中的角色。例如,开发人员、维护者或所有者。
  • 目标分支的分支保护

关闭合并请求#

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

先决条件:

  • 您必须是合并请求的作者或分配者,或
  • 您必须在项目中具有开发人员、维护者或所有者角色

要在项目中关闭合并请求:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 Code > 合并请求 并找到您的合并请求。
  3. 滚动到页面底部的评论框。
  4. 在评论框后,选择 Close merge request

极狐GitLab 关闭合并请求,但保留合并请求的记录、其评论和任何相关的流水线。

在合并时删除源分支#

您可以删除合并请求的源分支:

  • 在创建合并请求时,选择 当合并请求接受时删除源分支
  • 在合并合并请求时,如果您具有维护者角色,请选择 删除源分支

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

删除分支的操作由设置自动合并或合并合并请求的用户执行。如果用户缺乏正确的角色,例如在分叉项目中,源分支的删除会失败。

当目标分支合并时更新合并请求#

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

合并请求通常链接在一起,一个合并请求依赖于另一个合并请求中添加或更改的代码。为了支持保持单个合并请求较小,极狐GitLab 可以在目标分支合并到 main 时更新多达四个未关闭的合并请求。例如:

  • 合并请求 1:合并 feature-alphamain
  • 合并请求 2:合并 feature-betafeature-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. 设置为自动合并(以前称为流水线成功时合并)。
  8. 您的更改通过极狐GitLab CI/CD 的手动作业部署到生产环境。
  9. 您的实现成功交付给客户。

对于为公司网站编写网页的 Web 开发人员:

  1. 您检出一个新分支,并通过合并请求提交新页面。
  2. 您从审查者那里收集反馈。
  3. 您通过审查应用预览更改。
  4. 您请求 Web 设计师的实现。
  5. 您请求经理的批准
  6. 批准后,极狐GitLab:
    • 压缩提交。
    • 合并提交。
    • 通过极狐GitLab Pages 将更改部署到暂存。
  7. 您的生产团队将合并提交挑选到生产中。

筛选合并请求中的活动#

History
    • 引入于极狐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. 在页面右侧,选择 活动过滤器 以显示筛选选项。如果您已选择筛选选项,则此字段显示您的选择摘要,如 Activity + 5 more

  6. 选择您希望看到的活动类型。选项包括:

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

    ) 以反转排序顺序。

您的选择在所有合并请求中保持不变。您还可以通过单击右侧的排序按钮更改排序顺序。

解决一个线程#

当您想在合并请求中结束对话时,解决一个线程

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

将合并请求中的所有未解决线程移动到议题#

如果您在合并请求中有多个未解决的线程,可以创建一个议题单独解决它们:

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

极狐GitLab 将所有线程标记为已解决,并从合并请求添加一个链接到新创建的议题。

将合并请求中的一个未解决线程移动到议题#

如果您在合并请求中有一个特定的未解决线程,可以创建一个议题单独解决它:

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

极狐GitLab 将线程标记为已解决,并从合并请求添加一个链接到新创建的议题。

防止合并除非所有线程已解决#

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

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

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

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

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

现在,如果推送使差异部分过时,则线程会被解决。在线条未更改和顶级可解决线程上的线程不会被解决。

移动通知和待办事项#

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署
History
    • 引入于极狐GitLab 15.6,使用名为 notifications_todos_buttons功能标志。默认禁用。
    • 议题、事件和史诗也进行了更新。

在极狐GitLab 私有化部署上,此功能默认不可用。要使其可用,管理员需要启用名为 notifications_todos_buttons功能标志

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

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