我已经提交了一堆提交给Github上的项目,但是我意识到我没有在我目前使用的计算机上设置正确的电子邮件和提交者全名使我的提交,因此用户头像和电子邮件地址不存在。Git,重写以前的提交用户名和电子邮件
如何重写所有过去提交的电子邮件和用户名?
我已经提交了一堆提交给Github上的项目,但是我意识到我没有在我目前使用的计算机上设置正确的电子邮件和提交者全名使我的提交,因此用户头像和电子邮件地址不存在。Git,重写以前的提交用户名和电子邮件
如何重写所有过去提交的电子邮件和用户名?
你可以使用这个别名,所以你可以这样做:
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
希望它是有用的。
该解决方案已经存在: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
如果你已经迫使一些你提交到公共仓库,你不要做到这一点,或者它会制作其他人可能使用的主人历史记录的替代版本。 “不要越过溪流......这将是不好的......”
这就是说,如果它只是你已经提交给你的本地存储库的提交,那么通过一切办法解决这个问题之前,你推动到服务器。您可以使用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
应用奥利维尔迭尔的回答后:
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
上面的命令(注意加)力改写历史原始回购也是如此。谨慎使用!
为我工作,也正确地重写了原点的历史。 – Xeverous 2017-09-15 23:29:54
这将重写所有提交 - 不管谁创作它。谨慎使用。 – 2018-02-27 20:36:55
可能的重复[如何更改作者在git提交?](http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit -in-git) – givanse 2014-01-08 18:40:05