6

给定一个任意的、可执行的 Git 提交后挂钩,它不会在非交互式变基期间运行,根据 GIT-REBASE(1) 手册页,在非交互式模式下,无论是 withrebase --force-rebase还是 with都不是前者的同义词。rebase --no-ff

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

有人可以解释这种行为背后的原因吗?

4

2 回答 2

3

但是通过使用 进行交互式变基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-commitgit commit

在创建提交后,转换为不分叉的提交git commit省略了调用post-commit钩子。

于 2019-11-13T17:12:27.177 回答
0

来自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 提交)。

明白了吗?

于 2015-10-16T08:12:43.117 回答