Git 提交与推送常见报错处理笔记
Git 提交与推送常见报错处理笔记
前言
在日常开发中,git commit 和 git push 看似简单,但经常会遇到提交失败、推送被拒绝等问题。
本文整理两个常见场景:提交时被 ESLint 拦截,以及推送时出现 non-fast-forward 报错。
一、提交时被 ESLint 拦截
1.1 报错现象
执行提交命令:
1 | git commit -m "邮箱后缀已去除" |
出现类似信息:
1 | Running ESLint on web module |
并提示某些文件存在未使用变量:
1 | error Remove this useless assignment to variable "router" |
如图所示:

1.2 报错原因
这不是 Git 本身报错,而是项目配置了提交前检查。
常见流程是:
1 | git commit |
也就是说,只要暂存区里的文件存在 ESLint error,提交就会被拦截。
1.3 使用场景举例
例如你修改了用户列表页面,但该文件里原本或本次改动后存在未使用变量:
1 | const router = useRouter() |
如果 router 没有被使用,ESLint 就可能报错,导致提交失败。
1.4 推荐解决方式
优先修复 ESLint 报错。
例如删除未使用变量:
1 | // 删除前 |
然后重新提交:
1 | git add . |
1.5 临时跳过检查
如果只是本地临时提交,并且确认代码可以接受,可以跳过 pre-commit:
1 | git commit --no-verify -m "邮箱后缀已去除" |
简写:
1 | git commit -n -m "邮箱后缀已去除" |
注意:跳过检查不代表问题不存在,后续 CI 或团队检查仍可能失败。
二、推送时报 non-fast-forward
2.1 报错现象
执行:
1 | git push |
出现:
1 | ! [rejected] current -> current (non-fast-forward) |
截图如下:

2.2 报错原因
这个错误表示:远程分支比你本地分支更新。
也就是说,在你提交之前,远程仓库已经有了新的提交。如果你直接推送,可能覆盖远程内容,所以 Git 拒绝了。
可以理解为:
1 | 远程分支:A → B → C |
远程有 C,本地没有;本地有 D,远程没有。此时不能直接 push。
2.3 使用场景举例
常见场景包括:
多人协作时,别人先推送了代码。
你在另一台电脑上推送过代码。
远程仓库有人合并了分支。
本地代码不是基于远程最新版本开发的。
2.4 推荐解决方式
先拉取远程代码,再推送。
推荐使用:
1 | git pull --rebase |
--rebase 的作用是:先把远程最新提交拉下来,再把你的本地提交接到最新提交后面。
结果类似:
1 | 远程:A → B → C |
这样提交历史更清晰。
2.5 如果出现冲突
执行:
1 | git pull --rebase |
如果出现冲突,Git 会提示冲突文件。
处理步骤:
1 | git status |
查看冲突文件。
手动解决冲突后:
1 | git add 冲突文件 |
最后推送:
1 | git push |
2.6 不推荐的方式
不要随便使用强制推送:
1 | git push --force |
强制推送可能覆盖远程提交,导致别人代码丢失。
只有在非常确定远程提交可以被覆盖时,才考虑使用。
更安全的强推方式是:
1 | git push --force-with-lease |
但多人协作中仍需谨慎。
三、两个问题的区别
3.1 commit 失败
git commit 失败通常发生在本地。
原因可能是:
代码检查失败。
格式校验失败。
测试未通过。
提交信息不符合规范。
本质是:代码还没有成功生成本地提交。
3.2 push 失败
git push 失败发生在本地提交之后。
原因通常是:
远程分支更新了。
本地分支落后远程。
存在提交历史冲突。
本质是:本地提交已有,但不能直接同步到远程。
四、常用命令总结
4.1 正常提交
1 | git add . |
4.2 跳过提交前检查
1 | git commit --no-verify -m "提交说明" |
4.3 推送前同步远程
1 | git pull --rebase |
4.4 解决 rebase 冲突
1 | git status |
4.5 放弃 rebase
如果 rebase 过程中发现问题,可以取消:
1 | git rebase --abort |
总结
git commit 报 ESLint 错误,说明本地提交前检查未通过,优先修复代码问题,必要时可用 --no-verify 临时跳过。
git push 报 non-fast-forward,说明远程分支比本地更新,需要先执行:
1 | git pull --rebase |
开发中建议养成习惯:提交前保证代码检查通过,推送前先同步远程分支。这样可以减少冲突,也能避免覆盖他人的代码。