Skip to content

GitHub PR

未竟 edited this page Jun 3, 2026 · 7 revisions

GitHub Pull Requests 合并设置详解

适用对象:仓库管理员、团队负责人、开源项目维护者
说明:本文基于 GitHub 仓库的 Settings → General → Pull Requests 页面设置进行详细讲解。
截图来源:用户提供的 GitHub Pull Requests 设置界面(2026 年版本)


一、页面概述

GitHub 允许仓库管理员灵活控制 Pull Request 的合并方式。核心原则:

  • 至少启用一种合并方式(Merge commit / Squash / Rebase)。
  • 如果仓库的受保护分支(Protected Branch) 启用了 “Require linear history”(要求线性历史),则必须启用 Squash merging 或 Rebase merging
  • 合并方式可以同时开启多种,由 PR 作者在合并时自行选择。

二、合并方式选项(Merge options)

1. Allow merge commits(允许合并提交)✅

作用: 将源分支(Head branch)的所有提交完整保留,通过创建一个新的 merge commit 合并到目标分支(Base branch)。

历史特点

  • 保留完整的开发历史(包括 feature branch 上的所有 commit)。
  • 会产生一个额外的 merge commit,历史图呈现非线性(有分叉)。

适用场景

  • 需要完整追溯每个开发者的提交记录。
  • 团队希望保留 feature branch 的完整开发轨迹。
  • 适合小型团队或对历史完整性要求高的项目。

默认提交信息: 可自定义 merge commit 的默认模板,通常包含:

  • PR 编号
  • 源分支名称
  • 合并人信息

优缺点

  • ✅ 历史最完整
  • ❌ 历史不够干净,存在大量 merge commit

2. Allow squash merging(允许压缩合并 / Squash and merge)✅

作用: 将源分支的所有提交压缩成一个单一的 commit,然后合并到目标分支。

历史特点

  • 目标分支历史保持干净、线性
  • 不会产生多余的 merge commit。
  • 所有 feature 的改动被浓缩为一个 commit。

适用场景(强烈推荐):

  • 大多数开源项目和中大型团队的首选方式
  • 希望主分支(main/master)历史简洁易读。
  • 适合 “功能开发完成 → 一次性合并” 的工作流。
  • Require linear history 配合良好。

默认提交信息: 可自定义 squash commit 的默认模板,建议包含:

  • PR 标题
  • PR 描述摘要
  • 相关 Issue 编号

优缺点

  • ✅ 历史干净、线性
  • ✅ 便于 git log --oneline 查看
  • ❌ 丢失了 feature branch 内部的详细提交历史(可通过 PR 页面查看)

3. Allow rebase merging(允许变基合并 / Rebase and merge)✅

作用: 将源分支的提交**变基(rebase)**到目标分支的最新提交之上,然后进行 fast-forward 合并。

历史特点

  • 保持完全线性历史,没有 merge commit。
  • 每个 commit 的 hash 会改变(变基特性)。

适用场景

  • 严格要求线性历史的团队。
  • 希望每个 commit 都独立、有意义,且历史可读性极高。
  • 常与 Require linear history 规则一起使用。

注意事项

  • 变基会改变提交 hash,如果其他人已经基于该分支开发,需要谨慎操作(通常由 PR 作者自己 rebase)。
  • GitHub 会在合并前自动处理 rebase。

优缺点

  • ✅ 历史最线性、最干净
  • ❌ 可能引起 hash 变更的冲突风险(较少见)

三、分支更新提示设置

Always suggest updating pull request branches(始终建议更新 PR 分支)

作用: 当目标分支(Base branch) 有新提交时,在 Pull Request 页面自动显示 “Update branch” 按钮,提示开发者将 base 的最新更改合并或变基到自己的 PR 分支。

开启后的效果

  • PR 作者能一键更新分支,减少 merge conflict。
  • 特别适合开启了 CI 检查的仓库(避免 CI 基于旧 base 运行)。
  • 提升团队协作效率。

建议强烈推荐开启(除非团队有其他强制同步机制)。


四、自动合并设置(Auto-merge)

Allow auto-merge(允许自动合并)

作用: 当 Pull Request 满足所有合并条件后(Required reviews、Required status checks、All conversations resolved 等),自动执行合并,无需人工点击 Merge 按钮。

适用场景

  • 仓库已开启严格的分支保护规则
  • 希望在 CI/CD 通过后自动合并,减少等待时间。
  • 适合 “代码审查 + CI 通过 → 自动合并” 的高效流程。

使用方式

  1. 管理员在仓库设置中开启此选项。
  2. PR 作者(或有权限者)在 PR 页面点击 “Enable auto-merge”
  3. 满足条件后自动合并。

建议

  • 如果团队流程成熟,推荐开启
  • 可配合 Squash/Rebase 一起使用。

五、合并后自动删除分支

Automatically delete head branches(自动删除源分支)

作用: Pull Request 成功合并后,自动删除源分支(通常是 feature/xxxfix/xxx 等临时分支)。

好处

  • 保持仓库分支列表整洁。
  • 减少过时分支积累。
  • 降低维护成本。

注意事项

  • 删除后仍可恢复(通过 GitHub 的 “Restore branch” 或本地 reflog)。
  • 不会删除已合并到其他分支的重要分支。

建议强烈推荐开启,这是 GitHub 最佳实践之一。


六、推荐配置总结(2026 年最佳实践)

设置项 推荐状态 理由说明 适合项目类型
Allow merge commits 可选开启 保留完整历史时使用 小型团队、特殊需求
Allow squash merging 强烈推荐开启 历史干净、主流选择 大多数项目
Allow rebase merging 推荐开启 满足线性历史需求 严格线性历史团队
Always suggest updating branches 强烈推荐开启 减少冲突、提升效率 所有团队
Allow auto-merge 按需开启 自动化流程 CI 严格的团队
Automatically delete head branches 强烈推荐开启 仓库整洁、行业标准 所有项目

针对 Starward / miHoYo 工具类开源项目的建议

由于 Starward 是 WinUI 3 + .NET 的桌面工具项目,建议采用以下配置:

  1. 同时开启 Squash merging + Rebase merging
    • 给开发者灵活选择(简单功能用 Squash,复杂改动用 Rebase)。
  2. 开启 Always suggest updating pull request branches
  3. 开启 Automatically delete head branches
  4. 按需开启 Allow auto-merge(如果 CI 检查较多,建议开启)
  5. 关闭或按需开启 Allow merge commits(除非特别需要完整历史)

这样可以保持 main 分支历史清晰、专业,同时兼顾开发灵活性。


七、常见问题 FAQ

Q1: 为什么必须至少开启一种合并方式?
A: 否则无法合并任何 Pull Request。

Q2: 开启 Require linear history 后还能用 merge commit 吗?
A: 不能。必须使用 Squash 或 Rebase。

Q3: Squash 后还能在 Git 历史中看到原来的多个 commit 吗?
A: 不能在主分支历史看到,但可以在 PR 页面和 GitHub 的 commit 列表中查看原始提交。

Q4: 自动删除分支后还能恢复吗?
A: 可以。在 GitHub 仓库的 “Branches” 页面点击 “Show deleted branches” 即可恢复。

Q5: Auto-merge 和分支保护规则冲突吗?
A: 不冲突。Auto-merge 只有在所有保护规则满足后才会执行。


文档生成时间:2026-06-03
维护建议:定期检查 GitHub 官方更新,部分 UI 文案可能随版本微调。


本文档可直接用于团队 Wiki、仓库 README 或新成员 onboarding 材料。

Clone this wiki locally