【问题标题】:Change email on git commits? [duplicate]更改 git 提交的电子邮件? [复制]
【发布时间】:2018-04-27 21:58:57
【问题描述】:

我以前将电子邮件 A 作为我的主要,但现在将电子邮件 B 作为我的主要并且根本不使用 A。我将我的 github 主电子邮件更改为 B,但忘记在本地更新我的 .gitconfig,所以我所有提交的所有 patch 仍然说它们是由电子邮件 A 的用户创建的。

因此,我的所有提交都没有记录在我在 github 上的“贡献”下。

github官方对此的回应是添加邮箱A到我的github账号,我的Contributions会自动重建。

但是,我想从每个平台上删除电子邮件 A - 有没有办法改为更改我对电子邮件 B 所做的每次提交的“提交者”?

【问题讨论】:

    标签: git github commit


    【解决方案1】:

    git filter-branch 应该可以为你做到这一点;本质上,它用相同的 SHA1 重写了分支的整个提交历史。

    有一个example script on Github 演示了如何执行此操作;很短,所以在这里复制一下。

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    

    有必要强制推送过滤后的分支,因为您已经更改了它的历史记录。如果有人共享您的分支,这将使他们的历史记录与您的不匹配——您需要让所有协作者重新拉出已编辑的分支。如果他们一直在旧分支上工作并已对其进行了提交,他们可以将它们挑选到新分支上。

    您可能希望通过创建一个全新的分支并在那里更新历史记录来简化此操作,然后让每个人都拉取它。到那时,你们都可以同意这是新的 master 分支并在此基础上工作,或者干脆让每个人删除他们的旧 master 副本并将新分支重命名为 master

    【讨论】:

    • 谢谢,完美。它似乎奏效了。一旦我这样做了,我必须push吗?此外,没有其他人分叉或克隆这个东西,它是一个小的个人仓库,用于我自己的版本控制方便。
    • @jphollowed - 你需要使用git push --force,因为你正在覆盖你的仓库中的历史记录。
    • @JDB - 我编辑了您的注释,并澄清了使用该分支的任何人如何更容易赶上。
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2011-11-14
    • 2012-01-12
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多