首页 > 解决方案 > 将字符串添加到一系列 git 提交的消息中

问题描述

我的本地 git 存储库中有一系列提交,其中包含以下消息:

Added source.h
Broken link fixed
Corrected unit test
Deleted deprecated algorithm
...

在将它们推送到服务器之前,我想在每条提交消息中添加票证信息:

Ticket #9999 (1): Added source.h
Ticket #9999 (2): Broken link fixed
Ticket #9999 (3): Corrected unit test
Ticket #9999 (4): Deleted deprecated algorithm
...

当然我可以git rebasereword每一次提交,但我想自动化这个过程,因为它是如此重复。

我认为它应该以某种方式可行git filter-branch,但环境变量只提供 GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, and GIT_COMMITTER_DATE,但不提供消息。

如何访问和自动操作提交消息?

编辑:请注意,票号始终相同,但括号中的数字连续递增。

标签: gitgit-rebasegit-filter-branchgit-rewrite-history

解决方案


按照Mark 的提示使用 的--msg-filter选项filter-branch,完整的解决方案是:

如果提交范围是XXX..HEAD,括号中的数字可以用 表示git rev-list --count XXX..$GIT_COMIIT。因此,消息可以转换为sed

git filter-branch --msg-filter '
    i=`git rev-list --count XXX..$GIT_COMIIT`
    sed "1s/^/Ticket #9999 ($i): /"
    ' XXX..HEAD

推荐阅读