如何使用过滤器分支更改多个提交的提交作者?

时间:2019-10-07 03:34:42

标签: git

我正在使用此link上的脚本来编辑所有提交中的作者信息。

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

但是,我收到以下错误(警告?):

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

我也检查了日志。作者信息未更改。我在这里做错了什么?

更新:如@elpiekay所述,-f标志使脚本正常工作。

但是任何人都可以解释错误日志本身吗?为什么提到备份?我以前从未做过任何备份(不确定错误日志中将引用哪个备份

1 个答案:

答案 0 :(得分:0)

实际上,更好的做法是:

您现在可以改为使用其可能的后继者:newren/git-filter-repo(在Python中)和其example section

cd repo
git filter-repo --mailmap my-mailmap

my-mailmap

Correct Name <correct@email.com> <old@email.com>

这将用<old@email.com>

替换任何人所做的任何提交的作者姓名和电子邮件。

有关{p>的确切语法,请参见git shortlog mapping author section