2010-05-27 58 views
69

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

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

+6

可能的重复[如何更改作者在git提交?](http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit -in-git) – givanse 2014-01-08 18:40:05

回答

108

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

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

或在过去的10个提交:

git change-commits GIT_AUTHOR_EMAIL "[email protected]" "[email protected]" 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\" [email protected]; }; f " 

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

希望它是有用的。

+1

谢谢,它完美的作品! – josal 2014-03-12 23:16:26

+1

我没有得到我的标签,但这个工程。谢谢。 – Bharat 2016-04-21 11:37:58

+5

另外'git change-commitits GIT_COMMITTER_EMAIL“[email protected]”“[email protected]”'更改提交者电子邮件。 – 2017-01-31 21:32:46

50

该解决方案已经存在:Change the author and committer name and e-mail of multiple commits in 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 
+2

是否不会改变分支的所有提交(整个历史)的作者名? – hasen 2010-05-27 17:21:45

+2

是的,这将改变所有提交到新的作者信息。 – ewall 2010-05-28 19:31:25

+2

请将问题标记为重复,而不是复制粘贴答案。 – givanse 2014-01-08 18:40:59

20

如果你已经迫使一些你提交到公共仓库,你要做到这一点,或者它会制作其他人可能使用的主人历史记录的替代版本。 “不要越过溪流......这将是不好的......”

这就是说,如果它只是你已经提交给你的本地存储库的提交,那么通过一切办法解决这个问题之前,你推动到服务器。您可以使用git filter-branch命令与--commit-filter选项,所以它只能编辑匹配,你的不正确的信息,这样的提交:

git filter-branch --commit-filter ' 
     if [ "$GIT_AUTHOR_EMAIL" = "[email protected]_host.local" ]; 
     then 
       GIT_AUTHOR_NAME="Your Name Here (In Lights)"; 
       GIT_AUTHOR_EMAIL="[email protected]_host.com"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 
7

应用奥利维尔迭尔的回答后:

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 

...推改变了历史的原始资料库使用:

git push origin +yourbranch 

上面的命令(注意加)力改写历史原始回购也是如此。谨慎使用!

+0

为我工作,也正确地重写了原点的历史。 – Xeverous 2017-09-15 23:29:54

+0

这将重写所有提交 - 不管谁创作它。谨慎使用。 – 2018-02-27 20:36:55

相关问题