将字符串添加到 git 提交范围的消息中
Prepend string to messages of a range of git commits
我的本地 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 rebase
和 reword
每次提交,但我想自动化这个过程,因为它是如此重复。
我认为 git filter-branch
应该可以实现,但环境变量只提供
GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, and GIT_COMMITTER_DATE
,但不是消息。
如何访问和自动操作提交消息?
编辑: 注意票号总是一样的,只是括号里的数字是依次递增的。
假设您有逻辑将哪个票号附加到每条消息,您将使用 filter-branch
的 --msg-filter
选项。有关详细信息,请参阅 https://git-scm.com/docs/git-filter-branch 上的文档。
这个确切的功能有一个 git 挂钩。
此代码会将分支名称添加到提交消息中:
#!/bin/sh
BRANCH_NAME=$(git branch 2>/dev/null | grep -e ^* | tr -d ' *')
if [ -n "$BRANCH_NAME" ]; then
echo "[$BRANCH_NAME] $(cat )" >
fi
如果你想让它工作,你首先需要在你的 repo 的 .git/hooks 目录中创建一个可执行文件,并将其命名为 commit-msg
.
查看上面的来源 link:https://gist.github.com/bartoszmajsak/1396344/97081e76ab275f5fe526347908503febd1340495
还有另一个有用的 link 关于 git 钩子:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
继 to use the --msg-filter
option of 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
我的本地 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 rebase
和 reword
每次提交,但我想自动化这个过程,因为它是如此重复。
我认为 git filter-branch
应该可以实现,但环境变量只提供
GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, and GIT_COMMITTER_DATE
,但不是消息。
如何访问和自动操作提交消息?
编辑: 注意票号总是一样的,只是括号里的数字是依次递增的。
假设您有逻辑将哪个票号附加到每条消息,您将使用 filter-branch
的 --msg-filter
选项。有关详细信息,请参阅 https://git-scm.com/docs/git-filter-branch 上的文档。
这个确切的功能有一个 git 挂钩。
此代码会将分支名称添加到提交消息中:
#!/bin/sh
BRANCH_NAME=$(git branch 2>/dev/null | grep -e ^* | tr -d ' *')
if [ -n "$BRANCH_NAME" ]; then
echo "[$BRANCH_NAME] $(cat )" >
fi
如果你想让它工作,你首先需要在你的 repo 的 .git/hooks 目录中创建一个可执行文件,并将其命名为 commit-msg
.
查看上面的来源 link:https://gist.github.com/bartoszmajsak/1396344/97081e76ab275f5fe526347908503febd1340495
还有另一个有用的 link 关于 git 钩子:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
继--msg-filter
option of 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