单独或批量修改commit的author信息

629 阅读2分钟

场景1: 单独修改1个或几个少量commit的author信息。

有时新创建的工程或者新下载的工程,没有及时配置正确的author,email信息,并且你已经提交了几次代码,需要把提交的前几次修改为正确的author和email。 具体操作步骤如下:

1.配置正确的信息

git config user.name XXX
git config user.email YYY

2.修改commit

git rebase -i HEAD\~3

// ~3: 修改前3个的commit信息, 在想要修改的那条数据前;

输入完上面指令会出现下图:最近三次的commit信息展示出来 image.png

  1. 按键盘“i”, 进入编辑模式;
  2. 将所需要修改的commit那条信息pick改为edit;
  3. 按“Esc”后,退出编辑模式,输入“:wq”保存并退出展示界面;

git commit --amend --reset-author --no-edit

修改最后一次author信息;

git rebase --continue

继续执行,如果你之前修改了3处pick, 会继续帮你reset author;

git push -f

将commit信息推送到远程仓库;

场景2: 批量修改所有分支的commit信息的author和email

如果想批量修改所有分支的commit信息的author, 比如想把某个author统一换成另一个author,这种情况下需要写脚本执行;

  1. 配置正确的name和email
 git config user.name xxx
 git config user.email yyy
  1. 在工程根目录下的终端执行:

注意将下面指令中第2行到第4行,填写为你们自己正确的信息;

git filter-branch --env-filter '
OLD_EMAIL="xxx@qq.com"
CORRECT_NAME="yyy"
CORRECT_EMAIL="yyy@qq.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

以上代码的大概意思就是循环分支执行: 遇到指定旧邮箱的commit信息修改为新author和新email, 以此达到批量修改的目的。

  1. 再把修改记录提交的远程仓库;

注意,如果修改了master的commit信息,并且master分支设置了保护机制(比如不能push代码),需要提前将该保护机制先关闭,不然无法将修改的commit信息推到远程仓库上。 git push --force --tags origin 'refs/heads/*'