更改帐户后覆盖所有Git作者

时间:2012-09-03 05:33:40

标签: git github

我已经改变了我的Git作者作者姓名 “First Last< myemail@email.com>”到“First Last< otheremail@email.com>”

这两个电子邮件地址与不同的Github帐户相关联,我正在将我的所有个人项目迁移到第二个。

我的问题是,我过去在一些私人存储库(我是唯一的贡献者)的所有工作都是使用第一个帐户完成的。迁移的代码似乎已由其他一些用户提交。如何强制更改所有提交以使用我的新Git作者名称?

如果我能做到这一点,我可以强制将更改推送到Github,工作似乎完全由用户First Last完成,这就是我想要的。

谢谢!

2 个答案:

答案 0 :(得分:3)

最简单的方法是:

我会recommend this solution,它不会盲目地更改提交(如果你从其他开发者那里加入了补丁)

#!/bin/bash

git filter-branch --env-filter '
if [ "$GIT_AUTHOR_NAME" = "<old author>" ];
then
    GIT_AUTHOR_NAME="<new author>";
    GIT_AUTHOR_EMAIL="<youmail@somehost.ext>";
fi
if [ "$GIT_COMMITTER_NAME" = "<old committer>" ];
then
    GIT_COMMITTER_NAME="<new commiter>";
    GIT_COMMITTER_EMAIL="<youmail@somehost.ext>";
fi
' -- --all

答案 1 :(得分:1)

您可以将git filter-branch用于您的目的;具体来说,是env-filter

--env-filter <command>
  This filter may be used if you only need to modify the environment in which
  the commit will be performed. Specifically, you might want to rewrite
  the author/committer name/email/time environment variables (see
  git-commit-tree(1) for details). Do not forget to re-export the variables.

类似的东西:

git filter-branch \
  --env-filter 'export GIT_AUTHOR_NAME="First Last";
                export GIT_AUTHOR_EMAIL="otheremail@email.com";
                export GIT_COMMITTER_NAME="${GIT_AUTHOR_NAME}";
                export GIT_COMMITTER_EMAIL="${GIT_AUTHOR_EMAIL}";' \
  -- --all

如果您不需要更改作者姓名,只需删除GIT_AUTHOR_NAMEGIT_COMMITTER_NAME分配。