husky > 预提交钩子失败(添加 --no-verify 以跳过)

84

最近在执行 git commit 命令时,突然出现了 "husky > pre-commit hook failed (add --no-verify to bypass)" 的错误提示。

(C:\Windows\System32\cmd.exe)
> git commit
husky > npm run -s precommit (node v12.18.3)

'pretty-quick' is not recognized as an internal or external command,
operable program or batch file.

husky > pre-commit hook failed (add --no-verify to bypass)

我也尝试了git clean命令。有人遇到类似的问题吗?


3
你也可以删除.git/hook文件夹,然后卸载并重新安装husky。husky生成的文件与.git/hook/文件存在一些冲突。这对我有用。 - Elio
8个回答

191

Husky 可以防止您出现错误的 git commitgit push 等。如果您遇到此错误,请检查您的 代码语法。如果您的代码有效但仍然遇到此错误,请使用以下解决方案。

#解决方案 1:

删除 .git/hooks 文件夹,然后重新安装 husky 的 npm install。有可能与在 .git/hooks/ files 中生成的 husky 文件发生冲突。

#解决方案 2:

这是一个临时/快速解决方案。

git commit -m "message" --no-verify

1
它帮助了我,无需检查任何代码语法和其他的线程。谢谢 @Sathia - Vikas Ukani
4
我把项目目录中的.git/hook文件夹删除后,再次尝试提交代码,结果非常顺利。谢谢! - Sagar B
2
删除了 .git/hooks 文件夹并重新提交。这对我也起作用了。 - Gihanmu
3
是“hooks”复数形式。删除它对我有用。谢谢! - Ian
2
删除 .git/hooks 对我也起作用了! - Don D
显示剩余9条评论

8

@Elio的评论是更好的解决方案,因为--no-verify会跳过应该运行的任何脚本。

我假设如果脚本存在,那么它们是有原因的...

因此:

您还可以删除.git/hook文件夹,然后卸载并重新安装husky。 husky生成的文件与.git/hook/文件存在一些冲突。 这对我有用。

在我的情况下,卸载/重新安装并不是必要的。


对我来说,它是 hooks 目录。rm -r .git/hooks/ - Youth overturn

8
我发现有两个临时解决方案,如下所示:
git config --unset core.hooksPath  

或者

git commit -m "message" --no-verify 

1
第一条命令对我有用,但它确切地是做什么的? - Ralph David Abernathy

5

我对最佳答案建议只是省略钩子验证感到惊讶。如果你有 Husky 钩子,你不能忽视它们。

在我的情况下,一旦更新了某些依赖项,就会开始出现 husky > pre-commit hook failed (add --no-verify to bypass)。问题是通过在 husky 文件中更改 Husky 的 pre-commit linting 命令为 npm run lint(通常情况下这个命令可以很好地工作)解决的:

// .huskyrc.json
{
  "hooks": {
      "pre-commit": "npm run lint"
  }
}

注意:如果在您的package.json中声明了lint脚本,则此解决方案适用;在我的情况下,如下所示:
// package.json
{
  "scripts": {
    "lint": "tsc && eslint \"src/**/*.{js,ts,tsx}\" --quiet --fix"
  }
}

3

对于我来说,我需要添加

"lint-staged": {
  "**/*": "prettier --write --ignore-unknown"
},

请打开我的package.json文件。


你忘记了提到lint-staged是一个单独的npm包。 - Ivan Frolov

1

当我提交一个electron.js项目时,遇到了同样令人烦恼的错误提示信息。添加--no-verify选项可以解决问题,但每次提交都要这么做也有点麻烦。

后来我在package.json文件中发现了与precommit相关的内容:

{
  "scripts": {
    ...
    "precommit": "lint-staged",
    ...
  }
}

只需删除上面的那一行即可解决我的问题。


1
我猜它关闭了Husky钩子,类似于从.git文件夹中删除钩子。这种方式只是绕过了问题,而没有解决它。 - Artem Vertiy
@ArtemVertiy Husky不再支持在package.json中定义precommit hooks,hooks现在应该在.husky文件夹中定义。 - Spock

0
这个解决方案对我在NestJS应用程序上起作用。 使用prettier的2版本而不是3版本我的解决方案:
npm i -D  prettier@2.8.8

1
你的答案可以通过提供额外的支持信息来改进。请[编辑]以添加进一步的细节,如引用或文档,以便他人能够确认你的答案是否正确。您可以在帮助中心找到关于如何书写好答案的更多信息。 - Community

0

发生这种情况的原因之一是因为你的pre-commit文件包含npm test,如果你没有任何测试,就会出现这个错误。解决方法要么添加测试,要么从pre-commit文件中删除npm test


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接