Git change用户';过去提交中的凭据,但不更改历史记录(提交日期)

Git change用户';过去提交中的凭据,但不更改历史记录(提交日期),git,github,git-commit,Git,Github,Git Commit,过去,我开始从事一些项目,但没有在Terminal的git凭据中提供正确的GitHub电子邮件地址。因此,每个提交都显示如下: 这些提交不使用我的用户名,因此这些提交也不会显示在“贡献”部分: 如图1所示,我在3月14日提交了一份文件,但在投稿中没有显示(因为为git凭据设置了错误的电子邮件)。现在我想我所有的最新贡献都显示正确,但我也希望我过去项目的所有旧贡献都显示为这样。但我不想更改提交的历史记录(即日期)。我们可以使用.mailmap编写所有提交,但我认为这是一个有点困难的解决方案。

过去,我开始从事一些项目,但没有在Terminal的git凭据中提供正确的GitHub电子邮件地址。因此,每个提交都显示如下:

这些提交不使用我的用户名,因此这些提交也不会显示在“贡献”部分:


如图1所示,我在3月14日提交了一份文件,但在投稿中没有显示(因为为git凭据设置了错误的电子邮件)。现在我想我所有的最新贡献都显示正确,但我也希望我过去项目的所有旧贡献都显示为这样。但我不想更改提交的历史记录(即日期)。

我们可以使用
.mailmap
编写所有提交,但我认为这是一个有点困难的解决方案。 我发现非常有用的简单解决方案如下:

-->首先,在项目目录中使用
git shortlog-sne
检查所有用户的电子邮件提交

现在,如果您的项目只有一个用于提交的用户,那么您应该尝试以下方法:

git filter-branch -f --env-filter "
 GIT_AUTHOR_NAME='newName'
 GIT_AUTHOR_EMAIL='newEmail'
 GIT_COMMITER_NAME='newName'
 GIT_COMMITER_EMAIL='newEmail'
" HEAD
记住:
如果您的项目有多个贡献者,它也会将其更新为您将提供的一个贡献者

-->对于多个贡献者,您希望更新一个或特定贡献者。你可以试试有条件的方法,例如

git filter-branch -f --env-filter "
if test "$GIT_AUTHOR_EMAIL" = 'currentWrongEmail'
then
    GIT_AUTHOR_EMAIL='newEmail'
fi
if test "$GIT_COMMITTER_EMAIL" = 'currentWrongEmail'
then
    GIT_COMMITTER_EMAIL='newEmail'
fi
" HEAD

在这两种情况结束时,使用git push-f立即更新远程存储库。

试试git mailmap。看见和
.mailmap
功能上的文档。将您的其他电子邮件地址添加到您的GitHub配置文件中。@EdwardThomson是的,我已经为最近的提交添加了正确的电子邮件地址,但我的问题是关于我之前的提交。现在我的问题解决了,我把答案贴在下面。谢谢,我说的是你在早期提交时使用的电子邮件地址。您可以在GitHub中拥有多个电子邮件地址,这将使所有提交与您的个人资料相关联。