替换每个提交消息中的电子邮件地址

问题描述:

我最近注意到,我不小心使用了msysgit中的签名功能来签署具有不正确电子邮件地址的多个提交。不幸的是,我已经将提交推送到我的GitHub存储库。替换每个提交消息中的电子邮件地址

是否有任何方法从所有提交消息中删除(或至少替换)不正确的电子邮件地址?我宁愿不留下不正确的电子邮件的痕迹。

我已经尝试在.git目录及其子目录中的每个文件中替换每个出现的电子邮件地址,并使用git push --force --tags origin 'refs/heads/*'推送更改,但似乎不起作用。

注意:我是GitHub存储库的所有者。它目前是一个私人项目;没有人正在努力。

+1

更改ONLY用户这将重写提交,这可能会导致已经从存储库中提取并应用本地更改的人员造成混淆。新的提交将与旧的提交不同。如果您想继续使用它,请查看['git filter-branch'](https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html )。 – 2015-02-07 18:34:10

+0

https://help.github.com/articles/changing-author-info/ – Joe 2015-02-07 18:35:08

+0

@AndrewC我不想改变提交的作者,我想改变提交信息。 – Spookbuster 2015-02-07 18:39:52

您将需要使用过滤器分支

git filter-branch --commit-filter ' 
     if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ]; 
     then 
       GIT_COMMITTER_NAME="<New Name>"; 
       GIT_AUTHOR_NAME="<New Name>"; 
       GIT_COMMITTER_EMAIL="<New Email>"; 
       GIT_AUTHOR_EMAIL="<New Email>"; 
       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="Newname" 
    GIT_COMMITTER_EMAIL="newemail" 
    ' HEAD 
+0

然后按照以前使用相同的方法推? – Spookbuster 2015-02-07 18:44:02

+0

最好的办法是删除分支并重新添加它,正如你所说没有其他人正在处理它,所以不会做任何艰难的事情。 – CodeWizard 2015-02-07 18:49:34

+0

强制推送和删除/重新创建有什么区别?是否有一些github功能,它关心的区别? – michas 2015-02-07 20:41:45