接下来介绍如何查看之前Commit的记录。
因为当前只Commit了一次,不好比较,所以这里再次Commit,顺便也复习一下前文介绍的内容:
$ touch index.html # 创建文件index.html $ git add index.html # 把index.html加至暂存区 $ git commit -m "create index page" # 进行Commit
1. 使用Git命令
查看Git记录使用的是git log命令,其执行后的结果如下:
$ git log commit cef6e4017eb1a16a7bb3434f12d9008ff83a821a (HEAD -> master) Author: Eddie Kao <eddie@5xruby.tw> Date: Wed Aug 2 03:02:37 2017 +0800 create index page commit cc797cdb7c7a337824a25075e0dbe0bc7c703a1e Author: Eddie Kao <eddie@5xruby.tw> Date: Sun Jul 30 05:04:05 2017 +0800 init commit
越新的信息会显示在越上面。从上面这段信息中大致可以看出以下内容。
(1)Commit的作者是谁。
(2)什么时候Commit的。
(3)每次的Commit大概做了些什么事。
至于那个看起来像乱码的cef6e4017eb1a16a7bb3434f12d9008ff83a821a,其实是有特殊用意的。在Git中,这种看起来像乱码的文本,都是使用SHA-1(Secure Hash Algorithm 1)算法计算的结果。计算的方式会在5.17节进行详细的介绍,现在可以先把它当作一种重复概率非常低的文本。Git使用这样的字符串作为识别码。每个Commit都有一个这样的值,可以把它想象成每个Commit的身份证号。
在使用git log命令时,如果加上额外参数,可以看到不一样的输出格式。例如,加上-- oneline和–graph参数:
$ git log --oneline --graph * cef6e40 create index page * cc797cd init commit
输出的结果就会更为精简,可以一次性看到更多的Commit。
2. 使用图形界面工具(推荐!)
如果使用SourceTree,在左侧菜单栏中选择WORKSPACE→History选项,就可以看到所有的历史记录,如图5-11所示。
图5-11
两相比较,使用图形界面工具比在终端机窗口使用Git命令清楚多了。因此,在查看记录时,建议初学者使用图形界面工具,不仅可以少输入一些字,而且可以显示更完整的信息。
更仔细地研究一下界面上的信息,如图5-12所示。
图5-12
可以得出以下结论。
(1)越新的Commit越在上面。
(2)Description栏中除了Commit信息之外,还有一个“master”字样,这是Git中默认的分支名称。关于分支,会在第6章介绍。
(3)在这个区域,两次的Commit分别在画面上以蓝色的实心小圆圈呈现,而空心的小圆圈则是表示HEAD的位置。HEAD通常指向现在这个分支最前端的位置。更多关于HEAD的说明,可参阅5.15节。
(4)在Commit栏中,可以看到cef6e40和cc797cd,它们其实就是cef6e4017eb1a16a7b b3434 f12d9008ff83a821a和cc797cdb7c7a337824a25075e0dbe0bc7c703a1e这两串文本的缩写。其实对Git来说,只要有这6~8码的Commit信息就足以识别了。那如果前6~8码的缩写重复了怎么办?这时,Git会很贴心地提示:“该信息无法识别,请再提供更多位数的信息以供识别”。
以下是一些在使用Git查询历史记录时可能会遇到的问题(当前的历史记录如图5-13所示)。
图5-13
1. 想要找某个人或某些人的Commit
例如,想找一位名叫Sherly的作者的Commit,可以使用如下命令:
$ git log --oneline --author="Sherly" 930feb3 add pig 51d54ff add lion and tiger
此外,使用“\|”(“|”是“或者”的意思,前面需要加上“\”,否则会被判定为一般的文字而不是功能符号)可以查询Sherly以及Eddie这两个人的Commit记录:
$ git log --oneline --author="Sherly\|Eddie"
2. 想要找Commit信息中是否含有某些关键字
使用--grep参数,可以从Commit信息中搜索符合关键字的内容,如搜索“LOL”:
$ git log --oneline --grep="LOL"
3. 怎样在Commit文件中找到Ruby
使用-S参数,可以在所有的Commit文件中进行搜索,找到那些符合特定条件的内容:
$ git log -S "Ruby"
4. 怎样查找某一时间段内的Commit
在查看历史记录时,可以搭配--since和--until参数查询:
$ git log --oneline --since="9am" --until="12am"
这样就可以找出“今天早上9点到12点之间所有的Commit”。还可以再加一个after:
$ git log --oneline --since="9am" --until="12am" --after="2017-01"
这样可以找到“从2017年1月之后,每天早上9点到12点之间的Commit”。
以上这些命令做到的事,在SourceTree中都可以很方便地完成。在左侧菜单栏中选择WORKSPACE→Search选项,即可进入搜索界面,如图5-14所示。
图5-14
然后输入关键词或条件。例如,想要查找名叫Sherly的作者,就在搜索框中输入“Sherly”,如图5-15所示。
图5-15
单击Search按钮,即可查到所需资料,相当方便。