前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 修改历史 commits 中的用户名和邮箱

Git 修改历史 commits 中的用户名和邮箱

作者头像
用户6808043
发布2022-02-24 17:21:50
3.6K0
发布2022-02-24 17:21:50
举报
文章被收录于专栏:lostfawnlostfawn

如何批量修改 git 历史提交记录中的 username 和 email。

一. 作用

修改某个仓库历史 commit 的用户 name 和 email 信息。 将历史提交记录中的指定 name/email 修改为新的 name/email。

二. 步骤

  • 确认本地全局邮箱/用户名
  • 查看仓库的历史提交信息
  • 批量修改历史记录中的信息
  • 将修改结果推送到远程

1.确认本地全局邮箱/用户名

使用下面两个命令查看 git 在本地的全局邮箱和用户名。

代码语言:javascript
复制
git config user.name
git config user.email

如果需要修改 git 在本地的全局邮箱和用户名,执行下面的命令。

代码语言:javascript
复制
git config --global user.name "输入你的用户名"
git config --global user.email "输入你的邮箱"

现在我们已经设置好了本地 git 的user.nameuser.email信息。

2.查看仓库的历史提交信息

git clone 你要修改的仓库,进入该仓库目录,打开 git bash 界面,执行 git log 命令查看历史提交信息(重点关注 Author)。

3.批量修改历史记录中的信息

打开一个文本编辑器,粘贴下面代码。 然后把 OLD_EMAIL,CORRECT_NAME,CORRECT_EMAIL 改成自己的新旧邮箱用户名。

代码语言:javascript
复制
git filter-branch -f --env-filter '
OLD_EMAIL="原来的邮箱"
CORRECT_NAME="现在的名字"
CORRECT_EMAIL="现在的邮箱"
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

回到 git bash 界面,复制粘贴上面的代码并按回车执行。 如果 commit 记录比较多的话执行的时间会比较长。

等待执行完成后,再查看 git log 可以看到已经修改成功。

特殊情况:

如果上面的批量修改命令执行失败的话,执行一下这段命令:

代码语言:javascript
复制
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

4.将修改结果推送到远程

git push 将修改后的结果推送到远程后,git log 去看一下之前的提交记录中,name 和 email 信息都更新了。

三. Linux/Mac下可以写个脚本

在项目根目录下创建git-email.sh,写入下面这段代码:

代码语言:javascript
复制
#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="原来的邮箱"
CORRECT_NAME="现在的名字"
CORRECT_EMAIL="现在的邮箱"

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

然后需要赋予执行权限:

代码语言:javascript
复制
sudo chomd +x git-email.sh

执行一下这个 .sh 文件:

代码语言:javascript
复制
sudo ./git-email.sh
本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何批量修改 git 历史提交记录中的 username 和 email。
  • 一. 作用
  • 二. 步骤
  • 三. Linux/Mac下可以写个脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com