合并方法

您为项目选择的合并方法决定了合并请求中的更改如何合并到现有分支中。

配置项目的合并方法

  1. 在顶部栏上,选择 菜单 > 项目 并找到您的项目。
  2. 在左侧边栏中,选择 设置 > 通用
  3. 展开 合并请求
  4. 合并方法 部分,选择您想要的合并方法。
  5. 选择 保存修改

合并提交

此设置是默认设置,即使使用压缩,也总是创建一个单独的合并提交。使用此合并方法生成的示例提交图:

Commit graph for merge commits

  • 对于常规合并,它相当于命令 git merge --no-ff <source-branch>
  • 对于压缩合并,它会在正常合并之前压缩源分支中的所有提交,执行类似于以下的操作:

    git checkout `git merge-base <source-branch> <target-branch>`
    git merge --squash <source-branch>
    SOURCE_SHA=`git rev-parse HEAD`
    git checkout <target-branch>
    git merge --no-ff $SOURCE_SHA
    

合并提交与半线性历史记录

每次合并都会创建一个合并提交,但只有在可以进行快进合并时才会合并分支,这确保了如果合并请求构建成功,则目标分支构建在合并后也成功。使用此合并方法生成的示例提交图:

Commit graph for merge commit with semi-linear history

当您访问选择了“合并提交与半线性历史记录”方法的合并请求页面时,仅当可以进行快进合并时,您可以接受它。 当无法进行快进合并时,用户可以选择变基,请参阅(半)线性合并方法中的变基

此方法等效于合并提交方法中的相同 Git 命令。但是,如果您的源分支基于目标分支的过时版本(例如 main),则必须重新定位源分支。 这种合并方法创建了一个看起来更清晰的历史记录,同时仍然使您能够查看每个分支的开始和合并位置。

快进式合并

有时,工作流程规则可能会要求一个干净的提交历史,而不需要合并提交。在这种情况下,快进式合并是合适的。使用快进式合并请求,您可以保留线性 Git 历史记录,以及在不创建合并提交的情况下接受合并请求的方式。使用此合并方法生成的示例提交图:

Commit graph for fast-forward merge

此方法等效于常规合并的 git merge --ff <source-branch>,以及压缩合并的 git merge -squash <source-branch>

当快进式合并(--ff-only)设置已启用,不创建合并提交并且所有合并都是快进的,这意味着只有当分支可以快进时才允许合并。 当无法进行快进合并时,用户可以选择变基,请参阅(半)线性合并方法中变基

note使用快进式合并策略的项目无法按部署日期过滤合并请求,因为没有创建合并提交。

当您访问选择了“快进式合并”方法的合并请求页面时,仅当可以进行快进合并时,您可以接受它。

Fast-forward merge request

(半)线性合并方法中的变基

于 14.7 版本,引入了在不运行 CI/CD 流水线的情况下进行变基。

在以下合并方法中,您只能在源分支与目标分支保持同步时进行合并:

  • 合并提交与半线性历史记录。
  • 快进式合并。

如果无法进行快进式合并但可以进行无冲突的变基,系统为您提供 /rebase 快速操作,以及使用用户界面进行变基

Fast forward merge request

在 14.7 及更高版本中,您还可以在不运行 CI/CD 流水线的情况下进行变基。

如果目标分支在源分支之前并且不可能进行无冲突的变基,则必须在本地变基源分支,然后才能进行快进式合并。

Fast forward merge rebase locally

在压缩之前可能需要重新设置 base,即使压缩本身可以被认为等同于重新设置 base。

相关话题