为什么git不恢复';t调用预提交和提交消息钩子?
使用strace,我注意到git revert只调用两个钩子:为什么git不恢复';t调用预提交和提交消息钩子?,git,Git,使用strace,我注意到git revert只调用两个钩子: 准备提交消息 提交后 但是git commit调用了以下四个: 预提交 准备提交消息 提交消息 提交后 既然git revert生成了一个提交,为什么它不调用相同的呢 作为git提交的钩子 我在Git邮件列表上问了这个问题,但没有得到回应。所以我在这里问 当我实现一个钩子来检测时,我最终研究了这个问题 和拒绝还原合并提交的提交,因为它们是 我尝试将其实现为一个commit-msg钩子来搜索字符串 提交消息中的“这将恢复提交
- 准备提交消息
- 提交后
- 预提交
- 准备提交消息
- 提交消息
- 提交后
if (!(flags & VERIFY_MSG))
argv_array_push(&cmd.args, "-n");
这意味着默认情况下它运行git commit-n
。-n
标志:
绕过预提交和提交消息挂钩
正如在设置VERIFY_MSG
的内容中所指出的那样,它们是交互式的“编辑”或“重写”等,但不是git cherry pick
请注意,一旦sequencer完成,它将调用您的重写后钩子(如果您有一个钩子),因此您应该将检查放在那里。正如您所注意到的,您可以专门编辑提交消息,如果您这样做,似乎应该使用您的提交消息钩子,但事实并非如此。需要澄清的是,恢复提交是否不会触发客户端钩子或服务器端钩子?我认为您可以创建一个服务器端钩子来检测这样的提交,然后阻止它。但是+1是一个很好的问题。问题是git revert命令没有调用git commit命令调用的所有客户端钩子。您的领导让我找到git revert使用-n标志调用git commit的原因。它发生在2005年Junio Hamano的commit 9fa4db544e2e上!我知道了,但是由于您可以在git revert中编辑提交消息,因此我认为有必要在默认情况下进行预提交和调用提交消息。无论如何,我会把这个讨论带到Git的邮件列表中。但是,我检查了,git revert没有调用重写后钩子。即使它这样做了,因为它是一个“post”钩子,所以它也不能中止命令。但是你回答了我的问题。谢谢哦,对了,重写后钩子调用仅在sequencer被用于
git rebase-i
时使用。