抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Yuki 妙妙屋

不要因为走得太远,就忘了当初为什么出发。

在上个月,我更改了已使用近 9 年的网名,还顺便换了一个新邮箱(感觉自己萌萌哒),这本应该是一件值得开心的事才对…

但是直到今天,我才突然发现,我的 Github 墙居然不绿了!

why?

因为 Github 的绿墙,是通过账号所绑定的邮箱,找到仓库与之对应的 Git commit 记录并展示的。

也就是说,如果我们需要 Github 展示出自己的提交记录,就必须要在账号内添加与之对应的邮箱地址。

但是如果在哪一天,我们的邮箱不再使用了,或者是用户名被修改了,应该如何去纠正已 push 的 commit 信息?

commit –amend

git commit --amend 命令,是纠正此类错误信息最简单的方法。它用于追加提交信息,让你合并缓存区的修改和上一次 commit, 而不会创建一条新的提交记录。除此之外,还可以用来编辑上一次的 commit 描述。

1
git commit --amend --author=<author> -m <msg>

不过这有一个问题,它只能用于编辑最后一次的提交,所以无奈只能去寻找别的出路。

rebase

git rebase 是一个非常强大的命令,它通常被拿来与 git merge 作对比。与 git merge 一致,git rebase 的目的,也是将一个分支的更改并入到另外一个分支中去。但不同点在于,它可以编辑历史

1
git rebase -i <options>

当我们使用 rebase 命令进行变基操作后,就可以将 pick 修改为 reword 或者 edit 来编辑对应 commit 信息。

但是这也有一个问题,咱这 3 年来有几千条 commit 记录,一个个的去 rebase 这是不是有点…

filter-branch

在查阅了大量资料后,我发现了 git filter-branch 这样一条命令。它是专门用于 Git 历史修正的,能自定义过滤器,修改每一个树下与之相关的提交信息。

jesus,这与前面的两个命令比起来,简直就是降维打击。也难怪在官方文档一栏中,会将 filter-branch 称之为 The Nuclear Option(核武器级选项)

事不宜迟,赶紧开始来修改用户名和邮箱地址:

1
2
3
4
5
6
7
8
9
10
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "dc_yuki@qq.com" ];
then
GIT_AUTHOR_NAME="Yuki";
GIT_AUTHOR_EMAIL="admin@yuki.sh";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
git push -f origin master

好耶,墙又绿了~ヾ(≧▽≦*)o

strive

小趣闻

在我查阅了大量资料,快写完这篇文章的时候,突然发现… Git 的官方文档,专门有一栏阐述了如何去修改历史记录,与我前面总结的基本无异(摔)。(╯°□°)╯︵ ┻━┻

还真是印证了 yyx 的那一句话,多看文档.jpg

readme

评论