遇到 non-fast-forward
错误时,通常是因为远程仓库有本地尚未包含的提交(如远程仓库初始化时自动生成的 README.md
等文件)。以下是分步解决方案:
1. 拉取远程更改并合并历史
git pull origin master --allow-unrelated-histories
--allow-unrelated-histories
:强制合并两个独立分支的历史(本地和远程仓库初始提交不同)。- 此时会进入合并状态,可能需要解决冲突(若远程和本地有相同文件被修改)。
2. 解决合并冲突(如果有)
- 若拉取后提示冲突,用以下命令查看冲突文件:
git status
- 手动编辑冲突文件(冲突部分会被
<<<<<<<
和>>>>>>>
标记),保留需要的内容。 - 解决冲突后,标记文件为已解决并提交:
git add . git commit -m "Merge remote changes"
3. 重新推送代码
git push origin master
- 合并完成后,本地分支已包含远程历史,此时推送会成功。
备选方案:强制推送(谨慎使用)
若你确认远程内容可被覆盖(仅限个人项目),可强制推送:
git push -f origin master
-f
或--force
:强制用本地提交覆盖远程分支(会丢失远程原有提交)。
完整流程示例
# 拉取远程更改并合并
git pull origin master --allow-unrelated-histories# 解决冲突(如果有)
git add .
git commit -m "Fix merge conflicts"# 推送合并后的代码
git push origin master
注意事项
-
优先使用
git pull
合并
除非明确需要丢弃远程更改,否则避免强制推送(-f
),尤其是在协作项目中。 -
初始化仓库时避免自动生成文件
下次创建远程仓库时,可取消勾选“初始化 README”等选项,避免历史冲突。 -
保持本地与远程同步
在推送前,先拉取远程最新代码 (git pull
),确保本地分支与远程一致。