我已经改变了我的Git作者作者姓名 “First Last< myemail@email.com>”到“First Last< otheremail@email.com>”
这两个电子邮件地址与不同的Github帐户相关联,我正在将我的所有个人项目迁移到第二个。
我的问题是,我过去在一些私人存储库(我是唯一的贡献者)的所有工作都是使用第一个帐户完成的。迁移的代码似乎已由其他一些用户提交。如何强制更改所有提交以使用我的新Git作者名称?
如果我能做到这一点,我可以强制将更改推送到Github,工作似乎完全由用户First Last完成,这就是我想要的。
谢谢!
答案 0 :(得分:3)
最简单的方法是:
git filter-branch
我会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_NAME
和GIT_COMMITTER_NAME
分配。