修改git以往历史中所有commit的name和email
当换了新的电脑设备或者在 homestead 中使用 git 的时候;
如果忘了 git config 设置用户名和邮箱;
这样当 git commit 的时候就会使用设备名作为 git 用户名;
或者我们还可能手抖设置了错误的用户名和邮箱;
然后再一不小心推到了服务器或者 github 上后就尴尬了;
这时候就需要下面的脚本来批量修改历史 commit 中的用户名和邮箱了;
在项目跟目录下创建如下脚本文件 email.sh
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.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
3.修改以下变量:
| 变量 | 描述 |
|---|---|
| OLD_EMAIL | 错误的或者默认的邮箱 |
| CORRECT_NAME | 正确的用户名 |
| CORRECT_EMAIL | 正确的邮箱 |
给执行权限;
chmod +x email.sh
执行脚本;
./email.sh
没有效果就多执行几次;
再不醒就添加新个的commit 再执行;
如果遇到如下错误 :
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
执行如下命令;
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
然后再执行 email.sh 脚本;
如果 git push 失败就执行强制推送:
git push origin --force --all
git push origin --force --tags
force push 是极其危险的操作;
切记先提前告知同事;
否则被打个粉末性骨折都是轻的;
修改git以往历史中所有commit的name和email的更多相关文章
- [转]Git - 重写历史
转自http://git-scm.com/book/zh/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2 重写历史 很多时 ...
- Git 重写历史 filter-branch
source:https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2 重写 ...
- Git 修改历史提交信息 commit message
修改最近一条提交的消息 git commit --amend 进入vim模式 按字母 o 或者 insert键 开始修改内容 按 esc 推出编辑,最常用的是输入":q"直接退出, ...
- Git 实用操作:重写 Commit 历史
当我们修改完代码,提交了一个 commit,然后发现改错了,怎么修正?下面分两种情况来讨论:修正最近一次提交,和修正历史多个提交. 修正最近一次提交 如果发现刚刚提交的内容有错误,当场再修改一下再提交 ...
- git push撤销、git commit 撤销、git add撤销、修改git提交信息
原文地址:http://leisure.wang/?p=472 虽然自觉是一个Git工具的老手了,但是平时犯了一点错误,就发现有点捉襟见肘了.就好像今天我把一些代码玩坏了,想撤回到前几个版本去(此时已 ...
- 如何修改git commit的author信息
本地有多个git账号时,容易发生忘记设置项目默认账号,最后以全局账号提交的情况,其实对代码本身并无影响,只是提交记录里显示的是别的名字稍显别扭. 举个例子: 查看提交日志,假设以a(a@email. ...
- git学习------>如何修改git已提交的记录中的Author和Email?
一.背景 最近搭建好GitLab后,准备陆陆续续的将之前在SVN仓库中保存的代码迁移到GitLab上,昨天顺利将三个Android组件的代码迁移到GitLab后,其他同事发现迁移是成功了,但是pull ...
- git查看某一次commit里面的内容,即本次commit相对于原来的版本进行了哪些修改
1 知道commit id的话 git show commit-id 2 想要查看某次commit的某个文件进行了哪些修改 git show commit-id filename
- Eclipse中修改GIT分支名称
修改GIT分支名称: 1.切换到要修改名称的分支: 2.右击项目——Team——Advanced——Rename Branch…: 3.在弹出的Branch Rename框中选中要修改名的分支——Re ...
随机推荐
- 剑指Offer 1. 二维数组中的查找 (数组)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- JSP 页面显示sql中数据。el
存储数据库字段. package Bean; /** * Created by Administrator on 2017/5/24. */ public class info { private S ...
- 1.5 pycharm使用
1.5 pycharm使用 前言 在写脚本之前,先要找个顺手的写脚本工具.python是一门解释性编程语言,所以一般把写python的工具叫解释器.写python脚本的工具很多,小编这里就不一一 ...
- 求数组的相邻子数组的最大值(txt文件存储)
package mypackage; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- 【java编程】java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- PythonStudy——函数的使用 Use of functions
# print(a) # a = 10 # 注意:函数必须先定义,后使用 # print(get_water) def get_water(water, money): print('收入你的%d元钱 ...
- awk命令过滤tomcat的访日日志中IP地址
1. 命令如下 批量过滤日志文件,grep -v是要排除10网段开头的IP地址 sort会自动按ip排序 uniq -c去重并计数 sort -n 按数值从小到大排序 [root@linux-node ...
- QT QHttpMultiPart上传图片
使用get请求或post请求可以传递简单的参数,但要上传图片到服务器,就要多做一些工作了,如下代码片段利用post请求可成功上传图片到服务器: QNetworkRequest request; req ...
- TCP/IP详解--TCP连接中TIME_WAIT状态过多
TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的.仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT.服务器在处理客户端请 ...
- Ubuntu16.04安装Truffle和TestRPC
系统环境 Ubuntu16.04; NodeJS: v6.10.2; NPM: 3.10.10: Truffle: 2.0.8; TestRPC: 3.0.5 安装步骤 注意:以root用户 ...