2

我已将 Git 作者作者姓名从“First Last <myemail@email.com>”更改为“First Last <otheremail@email.com>”

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

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

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

谢谢!

4

2 回答 2

3

最简单的方法是:

  • 从新的 GitHub 位置克隆您的存储库
  • 从所有提交中更改作者:参见“如何在 git 中更改提交的作者? ”,基于git filter-branch
  • 强制将他们推回去(因为你是唯一的贡献者)

我会推荐这个解决方案,它不会盲目地更改提交(如果您合并了其他开发人员的补丁)

#!/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
于 2012-09-03T05:47:28.170 回答
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分配。

于 2012-09-03T05:45:27.540 回答