如何基于[TEST]前缀提交信息批量修改Git提交的作者与提交者
修改前缀为[TEST]的Git提交记录的作者与提交者信息
要实现仅修改提交信息以[TEST]开头的Git提交的作者(author)和提交者(committer)信息,可以在git filter-branch的环境过滤器中加入提交信息的正则匹配逻辑,替换原有的邮箱筛选规则。
完整命令
git filter-branch --env-filter ' CORRECT_NAME="你的正确用户名" CORRECT_EMAIL="你的正确邮箱@domain.tld" # 获取当前提交的完整信息 COMMIT_MESSAGE=$(git log --format=%B -n 1 $GIT_COMMIT) # 匹配以[TEST]开头的提交信息(正则支持通配) if [[ "$COMMIT_MESSAGE" =~ ^\[TEST\] ]]; then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags
关键逻辑说明
git log --format=%B -n 1 $GIT_COMMIT:获取当前处理的提交的完整提交信息(%B表示原始提交信息,-n 1只取第一行)[[ "$COMMIT_MESSAGE" =~ ^\[TEST\] ]]:用bash的正则匹配判断提交信息是否以[TEST]开头(^表示行首,\[和\]是转义后的方括号,避免被正则解析为字符组)
注意事项
- 执行命令前务必备份仓库:
git filter-branch会重写整个提交历史,操作不可逆 - 如果仓库已推送到远程,修改后需要强制推送:
git push --force --all(注意会覆盖远程历史,需确保团队成员知晓) - 若提交信息包含多行,上述逻辑仅匹配第一行;如需匹配整个提交信息中的任意位置,可去掉
^符号
内容的提问来源于stack exchange,提问作者A-d-r-i
相关产品推荐
相关产品推荐

