是否可以在过去的提交上运行git commit msg钩子?

是否可以在过去的提交上运行git commit msg钩子?,git,Git,我有一个commit-msg钩子,我为所有本地提交运行它,对于某个项目,我需要已经运行过它。问题是,当我从其他岔道进站时,我的一些同胞并没有运行这个钩子。到目前为止,我一直在做 $ git rebase --interactive $commit_parent 正如非常相似地概述的那样。选择未正确完成的提交,重新编辑,等等。所有这些都很可行,但也很乏味,因为我是手工做的 我如何实现自动化?钩子不需要监督 考虑到“hooks”手册页中对钩子的描述,我认为这很容易: 只需为每次提交运行hooks脚

我有一个commit-msg钩子,我为所有本地提交运行它,对于某个项目,我需要已经运行过它。问题是,当我从其他岔道进站时,我的一些同胞并没有运行这个钩子。到目前为止,我一直在做

$ git rebase --interactive $commit_parent
正如非常相似地概述的那样。选择未正确完成的提交,重新编辑,等等。所有这些都很可行,但也很乏味,因为我是手工做的


我如何实现自动化?钩子不需要监督

考虑到“hooks”手册页中对钩子的描述,我认为这很容易:

只需为每次提交运行hooks脚本:

git rev-list HEAD |while read h; do
    git show --format='%B' $h > tmp && sh .git/hooks/commit-msg.sample tmp
done
rm tmp

这可以使用自定义编辑器以自动方式实现:

#!/bin/bash
# Save to rebase_editor.sh, chmod +x it
file="$1"
if head -n1 "$file" | egrep -q '^pick' "$file" ; then
  perl -pi -e 's/^pick/r/' "$file"
fi
然后运行:

GIT_EDITOR=./rebase_editor.sh git rebase -i <some-rev>
GIT\u EDITOR=。/rebase\u EDITOR.sh GIT-rebase-i

在第一次调用时,我们的“编辑器”将从
rebase-i
获得一个提交列表,其中它将每个
pick
更改为
r
(即
reword
)。在这种模式下,
git
将立即开始调用我们的“编辑器”,并显示每个重定基址提交的消息(并且不会像在
pick
模式下那样出现任何暂停,您可以在该模式下更改提交本身)。

您的提交消息钩子到底做了什么?它是从提交消息中提取信息还是以某种方式修改提交消息?根据您想要实现的目标,解决方案将有所不同。具体来说,我使用的commit msg钩子是gerrit的ChangeID。什么因素会改变答案的性质?修改已经与其他人共享的提交可能会导致很多问题。只提取信息是可以的。是的,我知道。我不会将修改后的提交推回到同一个存储库中。
GIT_EDITOR=./rebase_editor.sh git rebase -i <some-rev>