首页/开发/Git 与协作速查/Rebase and merge 的行为与限制
协作与代码评审75 条

Rebase and merge 的行为与限制

GitHub 的 Rebase and merge 把 PR 内提交逐个重放到目标分支(无合并提交);若提交间存在互相冲突的历史,平台会要求先同步分支。

Git 与协作速查开发更新于 2026-10-13

变基合并是什么

平台的「变基合并」把评审请求里的提交逐个重放到目标分支上,不生成合并提交,得到线性历史。效果等价于在本地做好变基后快进推送。代价是提交哈希会被重写,而且平台在无法干净重放时会拒绝执行,要求先同步分支。

基本信息

效果线性历史、无合并提交、提交哈希重写
前置条件分支与目标分支之间须能干净重放
本地等效先变基到目标分支,再快进推送
并列方式与创建合并提交、压缩合并构成三种合并方式

典型使用场景

  • 团队要求主干保持线性历史
  • 每个提交都有独立意义、希望原样保留
  • 提交信息已符合规范,不需要在合并时再压缩
  • 本地已经完成变基与自查,希望平台直接重放
  • 需要按提交粒度回溯某个改动的来源

本地等效操作

本地等效操作
git fetch origin                                  # 先取最新的目标分支
git rebase origin/main                            # 在本地重放到最新主干
git push --force-with-lease origin feature/login   # 安全强推同步后的分支
gh pr view 128 --json mergeable                   # 复核平台是否判定可以合并

三种合并方式对照

方式历史形态代价
变基合并线性、无合并提交提交哈希与提交者信息可能变化
创建合并提交保留分支拓扑主干历史出现合并节点
压缩合并主干上一条提交原有提交粒度与信息被合并
平台执行变基时会用作者身份重放提交,提交者信息可能变成执行合并的人。对署名敏感的场景,建议在本地完成变基再推送。
重放之后原始提交的时间戳与签名都会随之变化,签名提交可能失去验证状态。需要保留验证状态的改动,应在本地变基并重新签名后再推送。
选择之前先确认团队要的是什么:线性历史便于阅读与回溯,分支拓扑便于看出一整块改动;两种诉求都合理,但要提前统一,避免各人各选一种方式。

易错点

  • 重放过程中原始提交的时间戳与签名会变化,签名提交在这种方式下可能失去验证状态
  • 分支落后或存在冲突时平台会拒绝执行,需要先更新分支再合并
  • 重放后提交哈希发生变化,其他分支或文档里记录的哈希引用随之失效
  • 把变基合并当成默认选项,线性要求并不明确的团队会失去分支拓扑信息

数据来源与参考

  • GitHub Docs:About merge methods(rebase and merge)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌