给定一个任意的、可执行的 Git 提交后挂钩,它不会在非交互式变基期间运行,根据 GIT-REBASE(1) 手册页,在非交互式模式下,无论是 withrebase --force-rebase
还是 with都不是前者的同义词。rebase --no-ff
rebase --interactive --no-ff
但是通过在提交后运行相同的 Git 钩子进行交互式变基。
有人可以解释这种行为背后的原因吗?
给定一个任意的、可执行的 Git 提交后挂钩,它不会在非交互式变基期间运行,根据 GIT-REBASE(1) 手册页,在非交互式模式下,无论是 withrebase --force-rebase
还是 with都不是前者的同义词。rebase --no-ff
rebase --interactive --no-ff
但是通过在提交后运行相同的 Git 钩子进行交互式变基。
有人可以解释这种行为背后的原因吗?
但是通过使用 进行交互式变基
rebase --interactive --no-ff
,在 . 上运行相同的 Git 钩子post-commit
。
实际上,自 Git 2.17+(2017 年第四季度)以来,该post-commit
钩子并未在交互式变基上运行
它仅在 Git 2.25+(2020 年第一季度)再次运行(on git rebase -i
):“ rebase -i
”在较早的更新中错误地停止运行post-commit
钩子,已更正。
请参阅Phillip Wood ( )的提交 4627bc7、提交 49697cb、提交 12bb7a5、提交 6a619ca、提交 b2dbacb、提交 88a92b6(2019 年 10 月 15 日) 。(由Junio C Hamano 合并 -- --在提交 5c8c0a0中,2019 年 11 月 10 日)phillipwood
gitster
sequencer
: 运行post-commit
钩子签字人:菲利普·伍德
在提交 356ee4659b之前(“
sequencer
:尝试在不分叉 'git commit' 的情况下提交”,2017-11-24,Git v2.17.0-rc0 --批次 #2中列出的合并),定序器将始终在每次选择或在它分叉创建提交时还原。post-commit
git commit
在创建提交后,转换为不分叉的提交
git commit
省略了调用post-commit
钩子。
来自https://git-scm.com/docs/git-rebase
--no-ff 使用--interactive,cherry-pick 所有重新设置的提交,而不是快速转发未更改的提交。这确保了重新定位分支的整个历史记录都是由新的提交组成的。
如果没有 --interactive,这是 --force-rebase 的同义词。
在恢复主题分支合并后,您可能会发现这很有帮助,因为此选项使用新提交重新创建主题分支,因此无需“恢复恢复”即可成功重新合并(请参阅 revert-a-faulty-merge How-To for细节)。
Cherry pick 创建新的提交,并且 git post-commit 钩子在新的提交创建后运行,对吧?
来自:https ://git-scm.com/docs/git-cherry-pick
描述 给定一个或多个现有提交,应用每个提交的更改,并为每个提交记录一个新提交。这要求您的工作树是干净的(不修改 HEAD 提交)。
明白了吗?