759

我正在查看一个 git 钩子,它在 Python 代码中查找打印语句。如果找到打印语句,它会阻止 git 提交。

我想覆盖这个钩子,我被告知有一个命令可以这样做。我一直没能找到它。有什么想法吗?

4

6 回答 6

1282

也许(来自git commit手册页):

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

此选项绕过 pre-commit 和 commit-msg 挂钩。另见githooks(5)

正如Blaise所评论的,-n对于某些命令可以有不同的角色。
例如,git push -n实际上是一次试运行。
只会git push --no-verify跳过钩子。


注意:Git 2.14.x/2.15 改进了 --no-verify 行为:

请参阅Kevin Willford (``)的提交 680ee55(2017 年 8 月 14 日) 。(由Junio C Hamano 合并 -- --提交 c3e034f中,2017 年 8 月 23 日)
gitster

commit: 如果没有pre-commit钩子,跳过丢弃索引

" git commit" 用于丢弃索引并从文件系统中重新读取,以防pre-commit钩子在中间更新它;当我们知道我们不运行pre-commit钩子时,这已经被优化了。


Davi Lima评论中指出不git cherry-pick支持--no-verify。 因此,如果一个cherry-pick 触发了一个预提交钩子,您可能,就像在这篇博文中一样,必须以某种方式评论/禁用该钩子,以便您的 git cherry-pick 继续进行。

git rebase --continue在合并冲突解决之后,如果是 , 则需要相同的过程。

于 2011-08-29T13:36:30.647 回答
29

来自man githooks

pre-commit
这个钩子由 git commit 调用,可以通过 --no-verify 选项绕过。它不带参数,并在获取建议的提交日志消息并进行提交之前调用。从此脚本中以非零状态退出会导致 git 提交中止。

于 2011-08-29T13:36:31.597 回答
26

两者都有commentno verify没有进一步的问题

git commit -m "Some comments" --no-verify
于 2020-02-19T15:46:49.083 回答
10

--no-verify有效,但就我而言,我不想一直将参数放在终端上。所以我选择了更具侵略性的东西。

如果要git hooks全局禁用,可以尝试运行以下命令:

git config --global core.hooksPath /dev/null

但是,如果您想保持原来的状态,只需在终端中运行以下命令:

git config --global --unset core.hooksPath

如果您不希望它是全局的,只需删除参数:--global

我希望它对某人有用,我用 git 2.16.3 测试过

于 2021-05-13T22:49:34.873 回答
3

例如,-n 或 --no-verify 不适用于“git merge --continue”之后的提交。

所以另一个更粗略的想法。

  1. 只需在文件中使用符号“#”注释行。 .git/hooks/pre-commit
  2. 运行单个或多个命令
  3. 取消注释
  4. 利润。
于 2021-10-25T07:48:10.690 回答
1

出于某种原因,--no-verify这个特定的钩子对我不起作用:prepare-commit-msg

如果您也遇到此问题,请尝试:

SKIP=prepare-commit-msg git commit
于 2021-06-25T17:12:43.277 回答