首页/开发/Git 与协作速查/git pull --ff-only 只快进拉取
合并变基与冲突71 条

git pull --ff-only 只快进拉取

拉取时不产生合并提交:远端领先则直接快进,分叉则失败并提示;适合要求线性主干、避免本地随意合并的团队。

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

pull --ff-only 是什么

git pull --ff-only 要求拉取只允许快进:远端领先时直接快进到远端位置,本地与远端分叉时则直接失败并给出提示。它把「拉取不动历史结构」变成硬性约束,适合要求主干线性、不希望有人随手制造合并提交的团队。失败不是故障,而是提示你先决定用变基还是合并来整合本地提交。可以配置 pull.ff only 作为默认行为。

基本信息

用途保证拉取不改动历史结构
语法git pull --ff-only
持久化git config pull.ff only
失败含义本地与远端已分叉,需要显式选择整合方式
平台任意 Git 客户端

典型使用场景

  • 主干要求线性,杜绝误生成的合并提交
  • 上线前同步生产分支,确认本地没有偏离
  • 脚本与 CI 中拉取代码,避免交互式合并挂住任务
  • 排查「拉取后多出一条合并提交」的成因
  • 新人环境下统一拉取行为,减少历史风格差异
  • 配合分支保护,让主干只以快进方式更新

常用示例

常用示例
git switch main
git pull --ff-only                     # 只允许快进
git config --global pull.ff only       # 设为默认行为
# 分叉时的处理:先看状态再决定
git fetch origin
git status
git rebase origin/main                 # 或 git merge origin/main

拉取时的三种结果

情形结果
本地落后直接快进,历史保持线性
本地与远端一致无需更新,命令无副作用
本地与远端分叉命令失败,等待你选择变基或合并
分叉时命令失败并不是故障,而是提示你先决定变基还是合并;脚本中使用要显式处理退出码。
它约束的是本地拉取行为,不能替代分支保护:主干仍需服务端规则阻止不合规的推送。
与之互补的还有 --ff-only 推送侧的收件端约束:本地管住拉取,服务端管住推送,两边同时生效才能真正保持主干线性。

分叉时的处置顺序

  • git fetch 刷新远端引用,先用 git status 看清领先落后
  • 本地提交还想要:git rebase origin/main 重放到远端之上
  • 本地提交可丢弃:git reset --hard origin/main(确认无未保存内容)
  • 处理完再拉取或直接推送,避免在分叉状态反复试错
只想确认是否落后而不改动本地状态时,先 git fetch 再看 git status,比直接拉取更可控,尤其在被拒绝或中断后发现本地状态不明时更适用。

易错点

  • 本地已有未推送提交时该模式无法帮你整合,需要显式变基或合并后再拉取
  • 脚本中不处理退出码会把拉取失败当成成功,后续步骤会基于过期代码执行
  • 把失败当成仓库故障去反复重试,真正该做的是先看 status 判断分叉情况
  • 用它替代分支保护是常见误解,服务端规则与本地约束解决的是不同层面的问题
  • 设置 pull.ff only 后与 pull.rebase 同时存在会产生冲突语义,配置里不要保留互相矛盾的选项

数据来源与参考

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