解决Git commit 命令“失效”的异常情况
最近一直在使用 Cursor 敲代码,今早正常敲完代码后使用 Cursor 自带的源代码管理提交代码时,产生了报错。因为经常遇到 Git 报错,所以也没很在意,通常借助搜索引擎和 AI 都能很快搞定。可这次却足足搞了我一上午。
报错信息
- 在 Cursor 自带的源代码管理器报错:
Git:Failed to execute git
,以及一些 Git 日志再无其他可用信息。 - 使用终端手动执行
git commit -m "提交代码"
时,并无任何报错提示,但实质上代码并未提交(暂存时无异常)
问题检查
根据搜索和 AI 的反馈,做了 N 多检查和尝试:
git config user.name
无问题git config user.email
无问题git add .
后,git status
检查已正常暂存代码git commit -m "提交代码"
后,git status
检查 commit 动作实际并未执行git config list
无异常- 尝试本机其他仓库的提交,也出现类似情况
- 删除本地
.git
目录,重新初始化仓库,未解决 - 卸载本机 Git,重新下载安装 Git,未解决
- 按照 AI 反馈一步步执行各种检查、尝试的命令,均未解决
到这里基本上这里已经耗尽了我对 Git 的仅有认知。
问题解决
最后在反复询问各种 AI 后,终于在命令 git commit -m "提交代码" --no-verify
下提交成功了。并且经过重新复现问题:
git commit -m "提交代码"
仍然无法提交git commit -m "提交代码" --no-verify
可以正常提交
经过向 AI 询问,--no-verify
参数的作用是跳过 Git 钩子(pre-commit 钩子),然后遵循 AI 反馈删除掉 .git/hooks/pre-commit
这个文件即可。
但是查询仓库的 .git/hooks/pre-commit
也并不存在。
思考了一下,使用 git config list --global
查询全局的配置,果然发现了一条:
core.hookspath=C:\Users\Administrator\AppData\Roaming\mkdocs-document-dates\hooks
进入其中后果然发现了 pre-commit
文件
删除掉后,解决问题。git commit -m "提交代码"
以及 Cursor 的源代码管理器均可正常提交了。
追根溯源
mkdocs-document-dates
是我维护 MkDocs 站点的一个插件,用于增加文档的创建和更新时间戳。查看其 README 得知:
采用了 Git Hooks 机制来自动触发缓存的存储(在每次执行 git commit 时),缓存文件也会随之自动提交。
看来应该是这里出了一些问题。这个应该也是插件的运行机制,但是为什么会出现在全局设置里就不得而知。
在我的使用场景下,MkDocs 推送到 Github 上去使用 Action 部署站点,只是很偶尔才会在本地运行检查,所以影响到不大。
已通过 Issues 反馈给插件作者,有后续将更新。