在git提交上更改电子邮件?

时间:2017-11-14 20:18:45

标签: git github commit

我曾经将电子邮件A作为我的主要邮件,但现在将电子邮件B作为我的主要邮件,并且根本不使用A.我将我的github主电子邮件更改为B,但忘记在本地更新我的.gitconfig,因此我所有提交的所有patch仍然说它们是由用户使用电子邮件A创建的。

因此,我的提交都没有记录在github上的“贡献”下。

官方github对此的回应是将电子邮件A添加到我的github帐户,我的贡献将自动重建。

但是,我想从每个平台上删除电子邮件A - 有没有办法改变我对电子邮件B的每次提交的“提交者”?

1 个答案:

答案 0 :(得分:2)

git filter-branch应该可以为你做到这一点;本质上,它使用相同的SHA1重写分支的整个提交历史记录。

有一个example script on Github来演示如何做到这一点;它很简短,所以我在这里复制它。

#!/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

当您更改历史记录时,必须强制推送已过滤的分支。如果有人分享您的分支,这将使他们的历史和您的历史不匹配 - 您需要让所有协作者重新拉动已编辑的分支。如果他们一直在老分支上工作并且已经对它做出了承诺,他们就可以把它们挑选到新的分支上。

您可能希望通过创建一个全新的分支并在那里更新历史记录来简化这一过程,然后让每个人都将其拉出来。此时,您可以同意这是新的主分支并在此基础上工作,或者只是让每个人都删除旧主副本的副本,并将新分支重命名为master