You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法拉取/推送到GitHub仓库,分支分歧导致拉取失败求助

问题场景

我的操作步骤:

  • 直接在GitHub仓库修改README文件,提交了3次commit
  • 未拉取上述commit的情况下,本地进行了4次commit

推送时系统提示需先拉取远程commit,执行git pull时收到警告:

warning: Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch this message by running one of the following commands sometime before your next pull:

git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only

执行git config pull.ff only后,再次拉取出现错误:

fatal: Not possible to fast-forward, aborting.
解决方案

现在远程和本地分支已经分叉了——两边各有独立的提交,没有包含关系,而pull.ff only只允许「快进合并」(也就是本地分支必须是远程分支的直接后代才能合并),所以才会报错。你可以选下面两种方法解决:

方法1:合并远程分支(保留完整提交历史)

这种方式会生成一个新的合并提交,把本地和远程的所有提交历史都保留下来:

  1. 先取消之前设置的pull.ff only:
git config --unset pull.ff
  1. 执行普通拉取(默认用merge策略):
git pull
  1. 这时会自动打开编辑器让你写合并提交的说明,保存退出就完成合并了
  2. 最后把合并后的分支推上去:
git push

方法2:变基(让提交历史变成线性)

这种方式会把你本地的4个提交,“移”到远程那3个提交的后面,让整个提交历史是一条直线,看起来更整洁:

  1. 先设置拉取时用rebase策略:
git config pull.rebase true
  1. 执行拉取变基:
git pull
  1. 如果碰到冲突,手动修改冲突文件后,执行:
git add <冲突的文件名>
git rebase --continue
  1. 变基完成后推送分支(因为变基改写了提交历史,需要加--force,多人协作的公共分支别用这个):
git push --force

注意点

  • 要是多人一起用的公共分支,优先选「合并」的方式,变基会改写历史,容易给其他协作的人搞出问题
  • 要是你自己的个人分支,变基能让提交历史更清爽,用着更舒服

内容的提问来源于stack exchange,提问作者Ayan Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:36:18