更新时间:2024-07-05 GMT+08:00

合并请求管理

代码托管服务支持多分支开发,并为分支合并建立了可配置的审核规则,当一个开发者发起一次合并请求时,可选择部分仓库成员参与到代码审视中,以确保合并代码的正确性。

合并请求发起时,检视人、审核人、合并人会收到邮件提醒。

基于代码仓库的安全,建议您在使用合并请求前了解并配置以下功能:

合并请求列表

在仓库详情的“合并请求”页签中,可以看到“合并请求列表”页面。

  • 可以切换、查看不同状态的合并请求。
  • 通过单击请求标题可以进入合并请求详情页。
  • 可以查看请求的简要信息,包括:涉及的分支、创建时间、创建人。
  • 提供了多条件维度的查找功能。
  • 在左上方有新建合并请求入口。

开启中:代表该请求已进入检视或合并阶段,分支未合并。

已合并:代表该请求已经完成审核,并完成分支合并的动作。

已关闭:代表该请求被取消,分支未产生实际合并。

所有:显示所有状态的合并请求。

新建合并请求

假设管理员已经设置好了分支合并规则,当您在开发分支上完成了功能开发,并需要发起合并请求时,请按照以下流程操作。

  1. 进入目标仓库详情页。
  2. 切换到“合并请求”页签。
  3. 单击“新建”按钮,选择要合并的分支。

    如上图在本示例中将刚完成开发任务的Dev分支合并到master分支中。

    支持源分支选择Fork仓库的分支。

  4. 单击“下一步”按钮,此时系统会检测两条分支是否有差异。

    • 如果分支没有差异,系统会做出提示,且不能新建合并请求。
    • 如果分支存在差异,则进入“新建合并请求”页面。

    “新建合并请求”页面的下方可以看到两条分支的文件差异对比详情、要合并分支的提交记录。

  5. 根据下表参数说明,填写页面信息。

    表1 参数说明

    参数

    说明

    更改分支

    单击可返回上一步更改需要合并的分支。

    标题

    输入合并请求的标题。

    描述

    会结合分支合并情况与要合并分支的提交(commit)备注生成默认值,您可以根据项目情况进行修改。

    说明:

    该输入框采用markdown格式,字符数限制在5000字符以内,即将超出上限时,使用顶部的操作按钮会按照markdown的语法替换内容。

    关联工作项

    可选择将合并动作关联到某个工作项,以起到自动改变工作项状态的作用。

    合并人

    在合并请求满足合入要求时,一般是所有审核人审核通过、所有问题都被解决(可设置不解决也能合并),合并人有权限执行合并操作(单击按钮)、也有权限关闭合并请求。

    检视人

    被指定参与合并分支检视,可以提出问题给发起人。

    审核人

    被指定参与合并分支评审,可以给出审核意见(审核通过、拒绝),也可以提出问题给发起人。

    合并后删除源分支

    可选择是否合并后删除源分支,初始会带入合并请求设置中预设状态。

    Squash合并

    开启Squash合并,可使基本分支的历史记录保持干净,并带有有意义的提交消息,而且在必要时可以更简单地恢复,详情请参考Squash合并

  6. 单击“新建合并请求”按钮,可以完成合并请求的提交,页面会跳转到该“合并请求详情页”

    在合并请求详情中,可以看到合入条件达成的状态、合并人、检视人、审核人、所关联的工作项等信息,同时可以查看可留下评审意见,可标注评审意见为待解决状态,并可看到该合并涉及的所有动态。

    • “提交记录”:可以看到源分支的相关提交记录。
    • “文件变更”:可以看到此次合并的变更内容,并可具体筛选出新增、修改、删除、重命名等变更种类。
    • “流水线”:可以看到门禁流水线的信息。

  • 当发起分支合并请求时,其相关人员(审核人、合并人)会收到提醒邮件。审核人不能为合并请求创建者。
  • 单个文件差异超过5000行、差异文件个数超过100个时,建议使用客户端合并后,推送到代码托管。

对合并请求进行检视、审核与合入

当检视人、审核人、合并人收到系统的分支合并请求通知邮件时,请按以下步骤进行操作。

  1. 进入目标仓库详情页。
  2. 切换到“合并请求”页签,单击目标合并请求名称,查看详情。
  3. 对目标合并请求进行检视。

    检视人与审核人均可对合并请求进行检视并给予检视意见,如果无修改意见,检视人可单击“检视通过”完成检视。

  4. 对目标合并请求进行审核。

    审核人可通过单击“拒绝”“通过”对合并请求进行审核。

  5. 通过合并请求门禁。

    表2 合入条件说明

    合入条件

    说明

    代码合并冲突

    当源分支代码与目标分支代码产生合并冲突时,需要先解决冲突才可进行下一步操作,解决代码冲突可参考解决合并请求的代码冲突

    评审意见门禁

    当发起人解决所有检视人或审核人的评审意见后,门禁显示通过,更多门禁详情请参考评审意见门禁详解

    流水线门禁

    当最新commit或者预合并commit拉起并成功执行流水线时,门禁显示通过,更多门禁详情请参考流水线门禁详解

    E2E单号未关联

    当合并请求关联工作项后,门禁显示通过,更多门禁详情请参考E2E单号关联门禁详解

    检视门禁

    当已检视的检视人数达到最小检视人数时,门禁显示通过,更多门禁详情请参考检视门禁详解

    审核门禁

    当已审核的审核人数达到最小审核人数时,门禁显示通过,更多门禁详情请参考审核门禁详解

  6. 对目标合并请求进行合入。

    当发起人通过以上合入条件后,合并人可单击“合入”按钮进行合入,反之,合并人可单击“关闭”将请求关闭。

Squash合并

Squash合并是将合并请求的所有变更提交信息合并为一个,并保留干净的历史记录。当用户在处理功能分支只关注当前提交进度,而不关注提交信息时,可使用squash merge。

当勾选Squash合并,可将源分支的多个连续变更记录合并为一个提交记录(Squash提交信息),提交到目标分支

  • 如果合并请求中的变更记录只有一个提交记录,则勾选Squash合并后,目标分支中的提交记录为源分支的提交记录。
  • 如果合并请求中的变更记录有多个提交记录,则勾选Squash合并后,目标分支中的提交记录为Squash提交信息

为了您更深入了解此功能,下面进行实际操作:

  1. 新建仓库。

    仓库名称命名为“repo”。

  2. 新建分支。

    分支名称命名为“Dev”。

  3. 新建提交。

    将“新建一个文件”作为一次Commit提交。

    Dev分支:新建两个文件并分别命名为“功能一”及“功能二”。

  4. 查看开启“Squash 合并”前的效果。

    切换到“Dev分支”下的“代码 > 提交 > 提交记录”界面,查看提交信息。

  5. 新建并合入合并请求。

    1. 源分支为Dev,目标分支为master,修改以下修改即可新建合并请求

      Dev分支:合并请求标题命名为“代码合入”,勾选“Squash 合并”“修改squash提交信息”为“新功能开发”。

    2. 完成对合并请求进行检视、审核后,即可合入请求。

  6. 查看开启“Squash 合并”后的效果。

    请求合入成功后,切换到“master分支”下的“代码 > 提交 > 提交记录”界面,与步骤4对比,提交信息已被合并。