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

提交代码推送PR后重新克隆,拉取PR遇non-fast-forward错误原因

为什么执行git pull origin pull/52/head:COC-92-changed-3-files会报non-fast-forward错误?

先拆解下你这条命令的作用:它试图把GitHub上PR#52的最新代码拉取到本地名为COC-92-changed-3-files的分支里。出现! [rejected] ... (non-fast-forward)错误,核心原因是本地分支和远程PR分支的提交历史无法直接快进合并,具体分这几种情况:

  • 本地分支已有独立提交
    你重新克隆项目后,可能已经在本地的COC-92-changed-3-files分支上做了新的提交,而远程PR#52的分支也有了更新(比如你后续又往PR对应的分支push了代码,或者维护者给PR做了修改)。这时候两个分支的提交历史分叉了,Git没办法自动完成“快进”合并——因为快进要求本地分支的所有提交都包含在远程分支的历史里,现在两边各有新内容,自然会被拒绝。

  • 本地分支状态与PR分支差异过大
    比如你误修改了PR分支里的文件,或者删除了PR中存在的内容,导致本地分支的当前状态和远程PR分支的head状态完全不兼容,没有共同的提交基础,Git无法直接合并。

  • PR分支已更新但本地分支未同步
    提交PR后,如果你又往PR对应的远程分支(比如你fork仓库里的源分支)推送了新的commit,远程PR的head指针已经向前移动了,但你本地的COC-92-changed-3-files分支还是克隆时的旧状态,这时候直接拉取就会因为历史不连续触发non-fast-forward错误。

简单的解决办法

如果本地分支没有需要保留的修改,最直接的方式是删除本地分支后重新拉取:

# 删除本地分支
git branch -D COC-92-changed-3-files
# 重新拉取PR代码到本地分支
git pull origin pull/52/head:COC-92-changed-3-files

如果本地有需要保留的修改,可以先暂存修改,再强制合并(注意合并后可能需要手动解决冲突):

# 暂存本地未提交的修改
git stash
# 允许合并无关联历史的分支
git pull origin pull/52/head:COC-92-changed-3-files --allow-unrelated-histories
# 恢复暂存的修改
git stash pop

内容的提问来源于stack exchange,提问作者Reda Mousawi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:42:49