程序员心情不太好,不小心在Commit信息里骂了客户,要怎样消掉?
身为程序员,难免会遇到一些不太顺心的客户或项目。心情不好的时候,在代码或Commit信息中“发泄”一下情绪也是很常见的,只是这要是让客户看见了总是不好解释。
要改动Commit记录,有以下几种方式。
(1)把.git目录整个删除(不建议)。
(2)使用git rebase命令来改动历史记录。
(3)先把Commit用git reset命令删除,整理后再重新Commit。
(4)使用--amend参数改动最后一次的Commit。
这里采用第4种方式,即改动最后一次的Commit信息。第2种和第3种方式会在后面的章节中陆续介绍。至于第1种方式,会把该项目中所有的Git记录全部清除,除非必要,不要轻易使用。
1. 使用--amend参数进行Commit
例如,原来的记录是这样的:
$ git log --oneline 4879515 WTF 7dbc437 add hello.html 657fce7 add container abb4f43 update index page cef6e40 create index page cc797cd init commit
那个WTF信息有点糟糕!要改动最后一次的Commit信息,只需直接在Commit命令后面加上--amend参数即可:
$ git commit --amend -m "Welcome To Facebook" [master 614a90c] Welcome To Facebook Date: Wed Aug 16 05:42:56 2017 +0800 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 config/database.yml
如果没有加上-m参数并提供要改动的信息,就会弹出Vim编辑器窗口让你编辑信息。再回来查看记录,WTF就被改成Welcome To Facebook了:
$ git log --oneline 614a90c Welcome To Facebook 7dbc437 add hello.html 657fce7 add container abb4f43 update index page cef6e40 create index page cc797cd init commit
如果使用SourceTree,可以单击左上角的Commit按钮进入Commit界面,然后在右下角选择Commit Options→Amend last commit选项,如图5-23所示。
图5-23
在下方的文本框中输入信息,然后单击右下角的Commit按钮,即可完成改动。
2. 你注意到了吗
虽然只是修改记录的信息,其他什么都没有改,但对Git来说,因为Commit的内容改变了,所以Git会重新计算并产生一个新的Commit对象,这其实是一次全新的Commit(只是看起来不像新的)。例如,上面这个例子中,改动前的Commit对象的SHA-1值是4879515,但改完信息之后SHA-1值变成了614a90c。虽然Commit的时间与文件的内容看起来并没有被改动,但它仍是一次全新的Commit。
3. 可以改动更早的记录吗
可以改动更早的记录,只是要使用Rebase命令来处理,因为--amend参数只能处理最后一次的Commit。关于Rebase命令的使用方式,可参阅7.1节。
注意,虽然这只是改动信息,但不管怎么说,它就是改动了一次历史记录,所以尽量不要在已经Push出去后再改动,否则可能会给其他人造成困扰。