为什么非交互式rebase上的Git post-commit挂钩没有运行?

时间:2015-03-31 14:59:47

标签: git git-rebase post-commit-hook non-interactive

给定一个任意的,可执行的Git post-commit钩子,它不会在非交互式rebase期间运行,既不是rebase --force-rebase也不是rebase --no-ff,它是前者在非交互模式下的同义词根据GIT-REBASE(1)手册页。

但是通过使用rebase --interactive --no-ff进行交互式rebase,在提交后运行相同的Git钩子。

有人可以解释这种行为背后的理由。

2 个答案:

答案 0 :(得分:0)

来自https://git-scm.com/docs/git-rebase

  

- no-ff使用--interactive,cherry-pick所有重新提交的提交,而不是快速转发未更改的提交。这确保了整个   重新分支的历史由新的提交组成。

     

没有--interactive,这是--force-rebase的同义词。

     

在恢复主题分支合并后,您可能会发现这有用   此选项使用新提交重新创建主题分支,因此可以   成功地重新成功而不需要恢复回归" (看到   revert-a-faulty-merge如何获取详细信息。)

Cherry pick创建新提交,并在创建新提交后运行git post-commit hook,对吗?

来自:https://git-scm.com/docs/git-cherry-pick

说明 给定一个或多个现有提交,应用每个引入的更改,为每个提交记录一个新提交。这要求您的工作树是干净的(没有HEAD提交的修改)。

这是清楚的吗?

答案 1 :(得分:0)

  

但是通过使用rebase --interactive --no-ff进行交互式变基,可以在post-commit上运行相同的Git挂钩。

实际上,自Git 2.17+起(2017年第四季度),post-commit挂钩不是在交互式资源库上运行的。

仅在Git 2.25+(2020年第一季度)上再次运行{em> (在git rebase -i上运行:“ rebase -i”不再运行post-commit钩子更早的更新中的错误,该错误已得到纠正。

请参见commit 4627bc7,请参见commit 49697cbcommit 12bb7a5commit 6a619cacommit b2dbacbcommit 88a92b6Phillip Wood (phillipwood)(2019年10月15日) 。
(由Junio C Hamano -- gitster --commit 5c8c0a0中合并,2019年11月10日)

  

sequencer:运行post-commit钩子

     

签名人:Phillip Wood

     

commit 356ee4659b之前(“ sequencer:尝试在不派生'git commit'的情况下进行提交”,2017-11-24,Git v2.17.0-rc0-mergebatch #2)在每次选择或还原之后,定序器将始终运行post-commit钩子,因为它派生了git commit来创建提交。

     

创建提交后,无需调用git commit钩子即可转换为不分叉post-commit的提交。