Git无法提交推送代码求助:执行commit后界面无响应
Git提交时界面无响应问题排查与修复
问题定位
从你的配置来看,提交无响应的核心原因是husky触发的lint-staged钩子卡住。具体来说,你的.lintstagedrc中配置了对测试文件执行npm run test:ci,该命令可能因测试用例问题或配置不当导致无限等待,进而阻塞整个提交流程。
解决方案
1. 临时绕过钩子验证,确认问题根源
执行以下命令直接提交,若能成功则证明是钩子脚本的问题:
git commit -m "init commit" --no-verify
2. 定位卡住的具体脚本
手动执行lint-staged中的命令,排查哪一步阻塞:
- 执行ESLint检查,确认是否正常结束:
npm run eslint - 执行CI模式测试,观察是否卡住:
若npm run test:citest:ci卡住,说明测试流程存在问题(如测试用例无限循环、异步操作未收尾、依赖服务未启动等)。
3. 调整lint-staged配置
方案A:临时移除测试钩子(优先验证)
修改.lintstagedrc,暂时去掉测试相关的检查,先确保提交流程正常:
{ "*.{ts,tsx}": "npm run eslint" }
方案B:优化测试钩子(推荐长期方案)
不要在提交时跑全量测试,改为只检测改动文件关联的测试用例,提升速度并避免阻塞:
{ "*.{ts,tsx}": "npm run eslint", "*.test.{ts,tsx}": ["npm run test:ci -- --findRelatedTests"] }
4. 重新校验husky钩子安装
执行以下命令重新初始化husky,确保钩子文件正确生成:
npm run prepare
检查项目根目录下的.git/hooks/pre-commit文件,确认其内容包含调用lint-staged的逻辑。
5. 排查测试用例问题
如果npm run test:ci确实卡住,需要逐一检查测试用例:
- 检查是否存在无限循环的逻辑
- 确认异步测试是否正确使用
done()回调或async/await - 排查测试依赖的外部服务是否正常启动(如Mock服务、数据库等)
内容的提问来源于stack exchange,提问作者Vadym Korzhynovskyi
相关产品推荐
相关产品推荐

