在上个月,我更改了已使用近 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 | git filter-branch --commit-filter ' |
好耶,墙又绿了~ヾ(≧▽≦*)o
小趣闻
在我查阅了大量资料,快写完这篇文章的时候,突然发现… Git 的官方文档,专门有一栏阐述了如何去修改历史记录,与我前面总结的基本无异(摔)。(╯°□°)╯︵ ┻━┻
还真是印证了 yyx 的那一句话,多看文档.jpg