场景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信息展示出来
- 按键盘“i”, 进入编辑模式;
- 将所需要修改的commit那条信息pick改为edit;
- 按“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,这种情况下需要写脚本执行;
- 配置正确的name和email
git config user.name xxx
git config user.email yyy
- 在工程根目录下的终端执行:
注意将下面指令中第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, 以此达到批量修改的目的。
- 再把修改记录提交的远程仓库;
注意,如果修改了master的commit信息,并且master分支设置了保护机制(比如不能push代码),需要提前将该保护机制先关闭,不然无法将修改的commit信息推到远程仓库上。
git push --force --tags origin 'refs/heads/*'