0%

修改 Git 已提交的用户名和邮箱

有些时候,可能你在 Git 提交的时候不经意间提交了错误的 Commit 作者信息,那么如何修改成正确的呢?

如果尝试修改 Git 的提交邮箱

1
2
git config --global user.name "Your Name"
git config --global user.email "Your Email"

这样可以修改作者的名字和邮箱

但是
这种方法只对之后的 commit 有效,之前提交过的就改不了了…

还好,Google 到了一种解决办法,这里分享下,也算是做个记录

  1. 打开终端(Linux 的终端或 Windows 下 Git 客户端的 git-bash.exe 均可)

  2. 同步下来你的项目并进入目录(以 repo.git 为例)

    1
    2
    git clone --bare https://github.com/user/repo.git
    cd repo.git
  3. 将下面的脚本,直接复制到终端命令行里
    并修改 oldEmail, newName, newEmail 三个变量为你自己的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    git filter-branch --env-filter '

    oldEmail="Your Old Email"
    newName="Your New Name"
    newEmail="Your New Email"

    if [ "$GIT_COMMITTER_EMAIL" = "$oldEmail" ]; then
    export GIT_COMMITTER_NAME="$newName"
    export GIT_COMMITTER_EMAIL="$newEmail"
    fi

    if [ "$GIT_AUTHOR_EMAIL" = "$oldEmail" ]; then
    export GIT_AUTHOR_NAME="$newName"
    export GIT_AUTHOR_EMAIL="$newEmail"
    fi

    ' --tag-name-filter cat -- --branches --tags
  4. 执行脚本,看到一堆 rewritten 的时候就说明写入完成了

  5. git log 查看新的 Commit 信息是否正确

  6. 提交

    1
    git push --force --tags origin 'refs/heads/*'
  7. 删除临时文件

    1
    2
    cd ..
    rm -rf repo.git

需要注意的是,上面的执行后,新 clone 出来的项目 Log 中 Name 和 Email 已经为最新的信息。在执行上面的几步之前已经 clone 出来的项目中,如果执行 git pull 的话,Log 中的 Name 和 Email 信息还是原来的信息

这样就算是完成了