给定一个任意的,可执行的Git post-commit钩子,它不会在非交互式rebase期间运行,既不是rebase --force-rebase
也不是rebase --no-ff
,它是前者在非交互模式下的同义词根据GIT-REBASE(1)手册页。
但是通过使用rebase --interactive --no-ff
进行交互式rebase,在提交后运行相同的Git钩子。
有人可以解释这种行为背后的理由。
答案 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 49697cb,commit 12bb7a5,commit 6a619ca,commit b2dbacb,commit 88a92b6,Phillip 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-merge在batch #2)在每次选择或还原之后,定序器将始终运行post-commit
钩子,因为它派生了git commit
来创建提交。创建提交后,无需调用
git commit
钩子即可转换为不分叉post-commit
的提交。