Git,重写以前的提交用户名和电子邮件

我已经提交了一大堆提交给Github上的项目,但是我意识到我没有在我目前使用的计算机上设置正确的电子邮件和提交者全名来提交我的提交,因此用户的头像和电子邮件地址不在那里。

我如何重写所有过去提交的电子邮件和用户名?

你可以使用这个别名,所以你可以这样做:

git change-commits GIT_AUTHOR_NAME "old name" "new name" 

或者最后10次提交:

 git change-commits GIT_AUTHOR_EMAIL "old@email.com" "new@email.com" HEAD~10..HEAD 

别名:

 change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" $@; }; f " 

来源: https : //github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig

希望它是有用的。

解决scheme已经存在: 在Git中更改多个提交的作者和提交者姓名和电子邮件

也就是说,

 git filter-branch -f --env-filter \ "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 

如果您已经将某些提交推送到了公共存储库,那么您希望这样做,否则会使其他人可能已经使用的备用版本的历史logging成为备用版本。 “不要越过河stream…这将是不好的…”

也就是说,如果只是你提交给你的本地仓库的提交,那么在推送到服务器之前,一定要解决这个问题。 你可以使用带有--commit-filter选项的git filter-branch命令,所以它只能编辑与你的不正确信息匹配的提交,就像这样:

 git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL" = "wrong_email@wrong_host.local" ]; then GIT_AUTHOR_NAME="Your Name Here (In Lights)"; GIT_AUTHOR_EMAIL="correct_email@correct_host.com"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD 

应用Olivier Verdier的回答之后:

 git filter-branch -f --env-filter \ "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 

…推动原始存储库使用中更改的历史logging:

 git push origin +yourbranch 

上面的命令(注意加)强制重写原始回购的历史。 谨慎使用!