Git 修改历史 commits 中的用户名和邮箱
一、作用
- 修改某个仓库历史 commit 的用户 name 和 email 信息。
- 将历史提交记录中的指定 name/email 修改为新的 name/email。
二、步骤
- 确认本地全局邮箱/用户名
- 查看仓库的历史提交信息
- 批量修改历史记录中的信息
- 将修改结果推送到远程
1. 确认本地全局邮箱/用户名
使用下面两个命令查看 git 在本地的全局邮箱和用户名。
git config user.name
git config user.email
如果需要修改 git 在本地的全局邮箱和用户名,执行下面的命令。
git config --global user.name "输入你的用户名"
git config --global user.email "输入你的邮箱"
现在我们已经设置好了本地 git 的 user.name 和 user.email 信息。
2. 查看仓库的历史提交信息
git clone 你要修改的仓库,进入该仓库目录,打开 git bash 界面,执行 git log 命令查看历史提交信息(重点关注 Author)。
3. 批量修改历史记录中的信息
打开一个文本编辑器,粘贴下面代码。
然后把 OLD_EMAIL,CORRECT_NAME,CORRECT_EMAIL 改成自己的新旧邮箱用户名。
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 可以看到已经修改成功。
特殊情况:
如果上面的批量修改命令执行失败的话,执行一下这段命令:
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
再次复制粘贴批量修改的代码并按回车执行。
4. 将修改结果推送到远程
这时候虽然本地修改成功了,但是你还没有推送到远程。
所以再执行一下命令:
git push origin --force --all
去看一下 Github 你就会发现之前的提交记录中,name 和 email 信息都更新了。
三、Linux/Mac下可以写个脚本
在项目根目录下创建 git-email.sh,写入下面这段代码:
#!/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
然后需要赋予执行权限:
chmod +x git-email.sh
执行一下这个 .sh 文件:
./git-email.sh
git log 检查修改成功后,最后别忘了推送到远程仓库。
Git 修改历史 commits 中的用户名和邮箱的更多相关文章
- git 修改历史提交信息
当你不小心,写错了提交的注视/信息,该如何处理呢.理论上,SCM是不应该修改历史的信息的,提交的注释也是. 不过在git中,其commit提供了一个--amend参数,可以修改最后一次提交的信息. ...
- Git 修改历史提交信息 commit message
修改最近一条提交的消息 git commit --amend 进入vim模式 按字母 o 或者 insert键 开始修改内容 按 esc 推出编辑,最常用的是输入":q"直接退出, ...
- [转]修改github已提交的用户名和邮箱
改变作者信息 为改变已经存在的 commit 的用户名和/或邮箱地址,你必须重写你 Git repo 的整个历史. 警告:这种行为对你的 repo 的历史具有破坏性.如果你的 repo 是与他人协同工 ...
- git中全局设置用户名、邮箱
1.查看git配置信息:git config --list (可以查看所有的配置信息) 2.查看git用户名:git config user.name 3.查看邮箱配置:git config user ...
- Git修改历史commit的author信息
前言 "嘀嗒嘀嗒",抬头看向墙上的钟表,此时已是凌晨1点.小明终于把Go语言圣经第二章的笔记写完,保存commit,提交,然后睡觉. 额,等等,不对,小明发现他用的是公司的git账 ...
- 修改git以往历史中所有commit的name和email
当换了新的电脑设备或者在 homestead 中使用 git 的时候:如果忘了 git config 设置用户名和邮箱:这样当 git commit 的时候就会使用设备名作为 git 用户名:或者我们 ...
- Git修改提交历史中的作者及邮箱信息
一.使用rebase 如图,红圈中提交的用户名及邮箱是需要改的,则需要复制需要改的提交记录的上一个记录hashcode,在本例中就是a0a891a48f92b51201042fccbe61ed1264 ...
- Git 修改用户名以及提交邮箱
问题背景: 在已毕业师兄的电脑上提交自己的 Github 代码,(尽管有重新设置了 自己的SSH),但是 Github网站提交结果却显示师兄提交的: 验证当前本地属性: 怎么知道本地有设置?git c ...
- git修改用户名以及邮箱
git 修改当前的project的用户名的命令为:git config user.name 你的目标用户名; git 修改当前的project提交邮箱的命令为:git config user.emai ...
随机推荐
- NAT网络地址转换技术
NAT网络地址转换技术 目录 一.NAT概述 1.1.概述 1.2.NAT 的应用场景 二.NAT的类型及配置命令 2.1.静态NAT 2.2.动态NAT 2.3.Easy IP 2.4.NATP 2 ...
- CVPR2021 | 开放世界的目标检测
本文将介绍一篇很有意思的论文,该方向比较新,故本文保留了较多论文中的设计思路,背景知识等相关内容. 前言: 人类具有识别环境中未知对象实例的本能.当相应的知识最终可用时,对这些未知实例的内在好奇心 ...
- python随机漫步
- 日常BUG-01 之 @Sl4j
问题描述: 需要打印日志,使用的是lombok包中的sl4j,lombok依赖如下: <dependency> <groupId>org.projectlombok</g ...
- php mkdir 创建多级目录以及修改权限
mkdir() 用法:mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径:第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权:注意:mode ...
- LeetCode周赛5214
我去,暴力超时,没啥人情味了.难受,一看答案,结果是dp的题目... 思路分析: 1.用个表记录下每个数当前的最大长度,同时是等差,说明有上一个数,那么当前的长度就是上一个数最大加一
- Java 设置PDF跨页表格重复显示表头行
在创建表格时,如果表格内容出现跨页显示的时候,默认情况下该表格的表头不会在下一页显示,在阅读体验上不是很好.下面分享一个方法如何在表格跨页是显示表格的表头内容,这里只需要简单使用方法 grid.set ...
- java二叉树的遍历(1)
树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...
- vue(17)vue-route路由管理的安装与配置
介绍 Vue Router 是 Vue.js官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参 ...
- 团队开发day10
项目整合成功,测试功能基本达到,目标完成!