【问题标题】:Skip Git commit hooks跳过 Git 提交挂钩
【发布时间】:2011-11-06 01:06:30
【问题描述】:

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

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

【问题讨论】:

标签: git githooks git-commit


【解决方案1】:

也许(来自git commit man page):

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 (``)commit 680ee55(2017 年 8 月 14 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit c3e034f,2017 年 8 月 23 日)

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

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


Davi Lima 指出 in the comments git cherry-pick 支持 --no-verify。
因此,如果cherry-pick 触发了预提交钩子,您可能需要像this blog post 那样评论/禁用该钩子,以便您的 git cherry-pick 继续进行。

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

【讨论】:

  • @DaviLima 谢谢。我已将您的评论包含在可见性的答案中。
  • 谢谢,@Vonc。 git rebase --continue btw 也会发生同样的情况
  • 嗨,在我的情况下,我团队中的某个人不断用一些预提交脚本更新我的 hook 文件夹,这太烦人了,有什么办法可以阻止我的 hook 文件夹被 git pull 覆盖?
  • 是的。必须重命名 .git\hooks\pre-commit 并在之后重命名。我很惊讶没有一个标志可以传递标志来提交
【解决方案2】:

来自man githooks

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

【讨论】:

    【解决方案3】:

    commentno verify 都没有问题

    git commit -m "Some comments" --no-verify
    

    【讨论】:

    • 你是什么意思“谁已经为此提交花费了几个小时”“没有进一步的问题”?你能详细说明一下吗?
    • @Moumit 该命令运行良好。您可能需要改写句子,因为这有点令人困惑。
    • 理解关注改变了它@PramodItagi
    • 你说的“没有其他问题”是什么意思?你能详细说明吗?你说的“有评论但没有验证”是什么意思?在 cmets 中详细说明会很好。和/或编辑您的答案。
    【解决方案4】:

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

    如果你想全局禁用git hooks,你可以尝试运行这个:

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

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

    git config --global --unset core.hooksPath
    

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

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

    【讨论】:

      【解决方案5】:

      -n 或 --no-verify 不适用于 'git merge --continue' 之后的提交。

      所以另一个粗略的想法。

      1. 只需文件中的注释行 .git/hooks/pre-commit 带有符号“#”。
      2. 运行单个或多个命令
      3. 取消注释
      4. 利润。

      【讨论】:

        【解决方案6】:

        由于某种原因,--no-verify 不适用于我使用这个特定的钩子:prepare-commit-msg

        如果你也遇到这个问题,试试:

        SKIP=prepare-commit-msg git commit
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-10
          • 2015-09-10
          • 1970-01-01
          • 2017-10-20
          • 2021-09-10
          • 2015-12-10
          • 2018-09-29
          相关资源
          最近更新 更多