除了定制输出格式的选项之外,
git log
还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。之前我们已经看到过
-2
了,它只显示最近的两条提交,实际上,这是
-<n>
选项的写法,其中的
n
可以是任何自然数,表示仅显示最近的若干条提交。不过实践中我们是不太用这个选项的,Git 在输出所有提交时会自动调用分页程序(less),要看更早的更新只需翻到下页即可。
另外还有按照时间作限制的选项,比如
--since
和
--until
。下面的命令列出所有最近两周内的提交:
$ git log --since=2.weeks
你可以给出各种时间格式,比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。
还可以给出若干搜索条件,列出符合的提交。用 --author
选项显示指定作者的提交,用 --grep
选项搜索提交说明中的关键字。(请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match
选项。否则,满足任意一个条件的提交都会被匹配出来)
另一个真正实用的git log
选项是路径(path),如果只关心某些文件或者目录的历史提交,可以在 git log
选项的最后指定它们的路径。因为是放在最后位置上的选项,所以用两个短划线(--
)隔开之前的选项和后面限定的路径名。
表 2-3 还列出了其他常用的类似选项。
选项 | 说明 |
---|
-(n) | 仅显示最近的 n 条提交 |
--since, --after | 仅显示指定时间之后的提交。 |
--until, --before | 仅显示指定时间之前的提交。 |
--author | 仅显示指定作者相关的提交。 |
--committer | 仅显示指定提交者相关的提交。 |
来看一个实际的例子,如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试脚本(位于项目的 t/ 目录下的文件),可以用下面的查询命令:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attribute
acd3b9e - Enhance hold_lock_file_for_{update,append}()
f563754 - demonstrate breakage of detached checkout wi
d1a43f2 - reset --hard/read-tree --reset -u: remove un
51a94af - Fix "checkout --track -b newbranch" on detac
b0ad11e - pull: allow "git pull origin $something:$cur
Git 项目有 20,000 多条提交,但我们给出搜索选项后,仅列出了其中满足条件的 6 条。
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是git log命令。
我们使用一个非常简单的 “simplegit” 项目作为示例。 运行下面的命令获取该项目:
$ git clone https://github.com/schacon/simplegit-progit
当你在此项目中运行git log命令时,可以看到下面的输出:
$ git log
commit ca82a6dff817ec66f4434200720269...
log--graph--pretty=format:'%Cred%h%Creset
-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset'--abbrev-commit
git config --global user.email “your email”
git log --graph --pretty=oneline --abbrev-commit #以数结构表示
git log #查看日志
git log太长可以按q退出
git reflog #查看详细操作
只修改了工作区:git checkout – 文件名
(除去工作区的修改,变得和版本库一样)
git log命令非常强大而好用,在复杂系统的版本管理中扮演着重要的角色,但默认的git log命令显示出的东西实在太丑,不好好打扮一下根本没法见人,打扮好了用alias命令拍个照片,就正式出道了!...
工作中,分支之间的合并,往往不是 fast-forword,而是 recursive strategy merge 策略式合并,所以会在历史中出现很多合并提交。运用下面的命令,你可以选择只看合并提交,或者非合并提交。一般情况下,我们想找一个提交,大多是为了某个修改去找,这个修改对应要么是具体的文件,要么是具体的修改的内容。放心,这个条件也支持。这个命令支持的搜索参数为提交的创建者和提交者,而且是支持正则表达式的,可以发挥的余地很多。不幸发生了合并冲突,还可以用这个命令,可以快速找到冲突的文件。
想要统计就得有数据源,而 `git log` 命令恰恰就能提供这个数据源,`git log` 本身就是一个显示日志的命令,日志记录的是代码库变化的数据,类似于描述代码库变化的 “史书”,想要描述历史就需要大量的数据支撑,想要统计修改的代码行数,只要我们从历史记录中找到需要计算的部分就可以了...