pre-commit钩子拦截是Git提交失败最常见原因,本质是ESLint等本地检查未通过,导致commit对象未生成;需先定位拦截层(环境/配置/权限等),再针对性修复。

Git提交失败不是代码丢了,而是流程卡在某个环节——先定位是哪一层拦住了,再针对性解决。
提交被 pre-commit 钩子拦截(比如 ESLint、Prettier)
这是最常见的“失败”:命令行显示 husky - pre-commit script failed 或 eslint --fix [FAILED],但 Git 本身没报错。本质是代码没通过本地检查,Git 连 commit 对象都没生成。
- 运行
git status确认文件确实已git add,且状态是 “to be committed” - 直接手动执行钩子里的命令,例如:
npx eslint --fix src/App.vue,看具体哪行报错 - 临时跳过检查(仅调试用):
git commit --no-verify -m "temp",但别推到远程 - 如果只是个别文件不合规,先
git reset HEAD <file>暂不提交,修好再加
提示 “Please tell me who you are”
Git 拒绝创建 commit,因为缺少作者身份。这不是网络或权限问题,而是本地配置缺失。
部署一个包含 4 个智能体(agent)的数字孪生平台。在以下情况下使用该技能: 1. 用户希望为物理资产监控与预测性维护等场景搭建数字孪生系统……
- 检查是否设置了用户信息:
git config --global user.name和git config --global user.email - 若为空,立即补上:
git config --global user.name "Your Name",git config --global user.email "you@example.com" - 注意:邮箱必须和你 Git 平台(GitHub/GitLab/GitCode)注册账号一致,否则后续 push 可能被拒
- 如果只针对当前项目设,去掉
--global,并在项目根目录下执行
执行 git commit 后提示 “nothing to commit, working tree clean”
你改了文件,Git 却说“没东西可提”——大概率是文件被忽略、未保存,或换行符/权限变更没触发跟踪。
- 用
git check-ignore -v path/to/file查看是否命中.gitignore规则 - 编辑器可能没真正保存(尤其 VS Code 有时缓存未写盘),强制保存并重试
- 跨平台开发时,
git config core.autocrlf设置错误会导致文件“看似修改实则无 diff”,Windows 推荐设为true,macOS/Linux 设为input - 用
git status -u查看未跟踪文件,确认修改是否出现在列表里
已经 commit 但 push 失败:rejected - non-fast-forward
远程分支有你本地没有的新提交(比如别人刚 push 了),Git 拒绝直接覆盖,这是保护机制,不是错误。
- 最安全做法:
git pull --rebase origin main,把你的提交“叠”在别人更新之后 - 如果 pull 后出现冲突,解决后
git add <file>,再git rebase --continue - 绝对避免无沟通的
git push -f;如确需强制推送,用git push --force-with-lease,它会检查远程是否有你不知道的新提交 - IDEA 用户可在 Pull 对话框中勾选 “Rebase current branch on upstream branch”,比命令行更直观
所有提交失败场景里,最容易被忽略的是:你以为失败了,其实 commit 已成功生成,只是没 push 出去。用 git log --oneline -n 5 看最新几条记录,确认你的提交是否已在本地历史中——这决定了该用 reset、revert 还是直接 push。

















