Whutech News

修改git全部已提交的用户名和邮箱


原文的link:http://dangzhiqiang.blog.51cto.com/7961271/1657864



即:修改git所有commit中的用户名和email

作为一名 Git 苦手,我一直使用的是傻瓜级的 Github 客户端,去年九月迁移到 OS X 后也是如此。好几个月后我发现自己的 contribution graph 有一大片空白,才意识到迁移之后 commit 的作者信息都错误了…

Before

Before

没计入 contribution 简直不能忍啊!身为打卡强迫症觉得这几个月相当于白干了啊!

查看 git log 发现提交者的邮箱是 Uni@Uni-MacBook-Pro.local,明白了原因是没有配置正确的邮箱。

配置方法:

git config --global user.email "youremail@google.com"
git config --global user.name "your name"

但是补救措施只对以后的 commit 起效。如果想修改之前的作者信息,Github 给出了可靠的官方指南:Changing author info。我打算照做的时候却发现第三步要复制粘贴的脚本怎么也找不到…后来意识到是 Gist 被墙了 = = 魂淡!

挂上 SS 终于看到了完整脚本…把我翻译后的完整步骤贴到下面来。

改变作者信息

为改变已经存在的 commit 的用户名和/或邮箱地址,你必须重写你 Git repo 的整个历史。

警告:这种行为对你的 repo 的历史具有破坏性。如果你的 repo 是与他人协同工作的,重写已发布的历史是一种不好的习惯。仅限紧急情况执行该操作。

使用脚本改变你 repo 的 Git 历史

我们写了一段能把 commit 作者旧的邮箱地址修改为正确用户名和邮箱的脚本。

注意:执行这段脚本会重写 repo 所有协作者的历史。完成以下操作后,任何 fork 或 clone 的人必须获取重写后的历史并把所有本地修改 rebase 入重写后的历史中。

在执行这段脚本前,你需要准备的信息:

  • 欲修改的旧的邮箱地址

  • 正确的用户名和邮箱地址

1.打开终端(Mac 或 Linux 用户)或命令行(Windows 用户)。

2.创建一个你的 repo 的全新裸 clone (repo.git 替换为你的项目,下同)
git clone --bare https://github.com/user/repo.git
cd repo.git

3.复制粘贴脚本,并根据你的信息修改以下变量:
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL

脚本:

#!/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

4.按 Enter 执行脚本。

5.查看新 Git 历史有没有错误。

6.把正确历史 push 到 Github:(push 有困难时记得修改 DNS 或者搭梯子)
git push --force --tags origin 'refs/heads/*'

7.清除临时 clone。
cd ..
rm -rf repo.git

All done!现在遗失的 contribution 都回来啦~新的一年记得在 Github 上勤打卡~

注:当执行完上述的命令后,发现新clone出来的历史记录中name和email信息已经为最新的信息;可是在执行上面的脚步之前已经clone出来的项目,如果执行git pull的话,历史记录中的name和email信息还是原来的信息




Statement: all articles / drawings reproduced on this website are for the purpose of transmitting more information and facilitating discussion, which does not mean that the website, the host and the organizer agree with their opinions or confirm the authenticity of their contents. The contents of the articles are for reference only. If the rights of the original author are violated, please contact the website administrator.

Baidu Real time hot spot rankingMore
微博实时热搜榜More
任娇青簪行杨旭文杭州疫情鹿晗粉色西装汪顺微信头像东京奥运日记我在他乡挺好的那一句道歉来迟了羽毛球女双金牌赛Ning 德云色49岁陈慧琳状态马薇薇六六微博被封沉浸式体验奥运项目第3代毒品混入饮料还以为许昕留了刘海张玉环无罪归来一周年张杰新专辑值得更好的这就是街舞4战队海报张怡宁退役的主要原因苏炳添教练在看台自责全平台封禁吴亦凡账号刘翔解说苏炳添的比赛做吕小军女儿举高高管够扬州新增8个中风险地区王进健任扬州市代理市长杭州新东方一学员被隔离小男孩哭着给樊振东加油梦龙被质疑中外用料不同张宝娟辞去扬州市长职务苏炳添说极限在9秒7几腾讯发布整治饭圈乱象公告5岁女童练乒乓球全年无休里约奖牌榜上还有一枚钻戒82岁老人医院输错药后离世陈清晨贾一凡vs波莉拉哈尤大学教授遇查酒驾自称加拿大人金星 八月拘W东西南北无疫烦日本连续4天单日新增确诊超万人南京今日新增均在隔离人群中发现南京通报新增11例确诊病例详情张雨霏霸气回应美国媒体兴奋剂质疑杭州拱墅区两名密接者已被集中隔离微博禁言和永久关闭账号共990个韩国知名方便面时隔13年首次涨价上海杜莎夫人蜡像馆已撤去吴亦凡蜡像张雨霏游完最后一项一直在等池江璃花子澳大利亚斥资千万防疫软件仅44人使用扬州共有1个高风险地区14个中风险地区扬州11587名在校大学生严格实施封闭管理