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

有些时候,可能你在 Git 提交的时候不经意间修改了 Commit 的作者信息(貌似只有我这么蛋疼 -_-|||),于是就想修改一下,改回原来的

然后

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 为例)

    git clone –bare https://github.com/user/repo.git
    cd repo.git

  3. 复制下面的脚本,可以直接复制到终端命令行里或新建 Shell 脚本
    并修改 oldEmail, newName, newEmail 三个变量为你自己的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
    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. 提交

    git push –force –tags origin ‘refs/heads/*’

  7. 删除临时文件

    cd ..
    rm -rf repo.git

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

这样就算是完成了