Skip to content

解决 Git Push 被拒绝(non-fast-forward)的错误

发表: at 11:00

在使用 Git 进行代码管理时,有时候我们在执行 git push 时会遇到如下错误:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'github.com:xxx/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

问题分析

出现这个错误的原因是:远程分支的提交记录比本地分支更新,而 Git 默认不会强制推送导致丢失远程更新的提交。因此,Git 拒绝了此次推送操作。

可能的场景包括:

解决方案

方法一:执行 git pull --rebase

如果希望保留本地的提交并合并远程最新提交,使用 git pull --rebase 命令:

git pull --rebase origin master

然后重新推送代码:

git push origin master

解释:

方法二:执行 git pull 并合并

如果不介意合并提交(merge commit),可以使用 git pull

git pull origin master

然后解决冲突(如果有),再执行:

git push origin master

解释:

方法三:强制推送(谨慎使用)

如果确认本地分支的内容才是正确的,并且可以覆盖远程分支的内容(可能会丢失其他人的提交),可以使用 强制推送

git push --force origin master

或者更安全的强制推送(避免删除他人新提交):

git push --force-with-lease origin master

⚠️ 注意:

预防措施

为了避免 non-fast-forward 错误,可以采取以下措施:

  1. 定期同步远程分支:在本地开发前,执行 git pull --rebase origin master 以保持最新代码。
  2. 小步提交并频繁推送:不要长时间本地开发后再一次性推送,减少冲突可能性。
  3. 使用分支管理:在 master 分支上避免直接提交,建议使用 feature 分支开发,并在合并前确保同步最新代码。

结论

git push 被拒绝并提示 non-fast-forward 错误时,可以:

希望这篇文章能帮助你更好地理解和解决 Git 推送被拒绝的问题!


上篇文章
终于把机器学习中的交叉验证搞懂了
下篇文章
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN解析