首页/开发/Git 与协作速查/git pull 的合并与变基配置
合并变基与冲突71 条

git pull 的合并与变基配置

pull.rebase 控制 git pull 默认用 merge 还是 rebase:true=变基、false=合并、merges=仅非快进时变基;先想清楚团队策略再设。

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

pull 的拉取策略是什么

git pull 其实是「取回远端」加「整合本地」两步,策略配置决定第二步怎么做:merge 会生成合并提交,rebase 会把本地提交重放到远端历史之上、保持线性。pull.rebase 就是控制这个默认行为的开关,取值 true、false、merges。它没有绝对优劣,取决于团队对历史形态的要求,但一定要在团队层面统一并写进文档,否则同一仓库会出现两种历史风格。

基本信息

配置键pull.rebase true | false | merges
命令行覆盖git pull --rebase / --no-rebase / --rebase=merges
相关配置pull.ff only 只允许快进
影响决定分叉时生成合并提交还是线性历史
平台任意 Git 客户端

典型使用场景

  • 团队要求主干线性,避免无意义的合并提交
  • 本地有未推送提交,需要把它们重放到最新远端之上
  • 只希望在确实分叉时才变基,快进时保持原样
  • 排查拉取后为何多出一条合并提交
  • 统一团队环境,减少新人拉取时的反复询问
  • 脚本中显式指定策略,不依赖个人配置差异

常用示例

常用示例
git config --global pull.rebase true        # 全局默认变基拉取
git config --global pull.ff only            # 只允许快进
git pull --rebase origin main               # 单次变基拉取
git pull --rebase=merges origin main        # 仅在分叉时变基
git pull --no-rebase origin main            # 单次改用合并
git config --get pull.rebase                # 确认当前设置

取值含义

取值行为
true拉取时把本地提交变基到远端之上,历史保持线性
false分叉时生成合并提交,保留双方拓扑
merges快进时保持原样,只在需要整合时变基
未配置且可能分叉时,较新版本的 Git 会给出提示要求先选定策略;按团队规范一次性配置好,比每次临场决定更省事。
pull.rebase=true 会改写本地未推送提交的哈希,如果本地有分支或标签依赖于这些提交号,需要重新确认指向。

易错点

  • pull.rebase=true 会改写本地未推送提交的哈希,其他基于旧提交号的分支需要重新核对
  • 把 pull.rebase 与本地变基工作流混用时冲突可能在拉取阶段就出现,先确认当前分支状态再操作
  • 团队成员各配各的策略,同一仓库历史形态混乱,评审者难以判断分支来源
  • 用 pull --rebase 处理已推送的本地提交会产生与远端不一致的哈希,之后推送需要强推
  • 只改个人配置而没写进团队文档,换台机器行为就变,规范应落在仓库说明或初始化脚本里

数据来源与参考

  • Git 官方文档:git-pull(pull.rebase)
  • Git 官方文档:git-config
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌