Git 在不更改历史记录(提交日期)的情况下更改过去提交中的用户凭据
Git change user's credentials in past commits without changing the history (date of commits)
过去,我开始从事某些项目时没有在终端 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
Remember:
如果您的项目有多个贡献者,它还会将其更新为您将提供的一个贡献者。
--> 对于多个贡献者,您想要更新一个或特定的贡献者。您可以尝试条件方法,例如
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 的凭据中提供正确的 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
Remember:
如果您的项目有多个贡献者,它还会将其更新为您将提供的一个贡献者。
--> 对于多个贡献者,您想要更新一个或特定的贡献者。您可以尝试条件方法,例如
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
立即更新远程存储库。