在提交了若干更新,又或者克隆了某个项目以后
也许想回顾下提交历史git
完成这个任务最简单而又有效的工具是 git log
命令。github
使用 “simplegit” 项目做为示例
首先克隆该项目:web
$ git clone https://github.com/schacon/simplegit-progit
在此项目中运行 git log
命令时,能够看到下面的输出:shell
默认状况下,git log
会 按时间前后顺序 列出全部的提交,最近的更新排在最上面
列出了每一个提交的 SHA-1 校验和、做者名字和电子邮件地址、提交时间以及提交说明bash
选项 | 说明 |
---|---|
-p | 按补丁格式显示每一个提交引入的差别 |
–stat | 显示每次提交的文件修改统计信息 |
–shortstat | 只显示 --stat 中最后的行数修改添加移除统计 |
–name-only | 仅在提交信息后显示已修改的文件清单 |
–name-status | 显示新增、修改、删除的文件清单 |
–abbrev-commit | 仅显示 SHA-1 校验和全部 40 个字符中的前几个字符 |
–relative-date | 使用较短的相对时间而不是完整格式显示日期(好比,“2 weeks ago”) |
–graph | 在日志旁以 ASCII 图形显示分支与合并历史 |
–pretty | 使用其余格式显示历史提交信息。选项包括 oneline,short,full,fuller 和 format |
其中一个比较有用的选项是 -p
,它会显示每次提交所引入的差别
与此同时,也能够使用 -2
选项来仅显示最近的两次提交app
$ git log -p -2
该选项除了显示基本信息以外,还附带了每次 commit
的变化svg
适用于当进行代码审查
或者快速浏览某个搭档提交所带来的变化的时候函数
能够使用 --stat
选项,查看每次提交的简略统计信息:工具
$ git log --stat
在每次提交的下面列出全部被修改过的文件、有多少文件被修改了测试
能够使用 --pretty
选项,自定义格式的方式展现提交历史
这个选项有一些内建的 子选项 :
好比 oneline
会将每一个提交 放在一行显示,在浏览大量的提交时很是有用
另外还有 short
,full
和 fuller
选项,它们展现信息的 格式详尽程度 不一:
还有 format
,能够 定制要显示的记录格式
这样的输出对后期提取分析格外有用
$ git log --pretty=format:"%h - %an, %ar : %s"
下表列出了经常使用的格式占位符写法及其表明的意义:
选项 | 说明 |
---|---|
%H | 提交的完整哈希值 |
%h | 提交的简写哈希值 |
%T | 树的完整哈希值 |
%t | 树的简写哈希值 |
%P | 父提交的完整哈希值 |
%p | 父提交的简写哈希值 |
%an | 做者名字 |
%ae | 做者的电子邮件地址 |
%ad | 做者修订日期(能够用 --date= 选项定制格式) |
%ar | 做者修订日期,按多久之前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期(距今多长时间) |
%s | 提交说明 |
做者:实际做出修改的人
提交者:最后将此工做成果提交到仓库的人
因此,当你为某个项目发布补丁,而后某个核心成员将你的补丁并入项目时
你就是做者,而那个核心成员就是提交者
--graph
选项添加了一些 ASCII 字符串来形象地展现分支、合并历史
当 oneline
或 format
与另外一个 log
选项 --graph
结合使用时尤为有用:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap * 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit |\ | * 420eac9 Added a method for getting the current branch. * | 30e367c timeout code and tests * | 5a09431 add timeout protection to grit * | e1193f8 support for heads with slashes in them |/ * d6016bc require time for xmlschema * 11d191e Merge branch 'defunkt' into local
Git 默认会将全部的输出传送到 分页程序 中
因此一次只会看到一页的内容
除了定制输出格式的选项以外,
git log
还有许多很是实用的限制输出长度的选项,也就是只输出一部分的提交
选项 | 说明 |
---|---|
-(n) | 仅显示最近的 n 条提交 |
–since, --after | 仅显示指定时间以后的提交 |
–until, --before | 仅显示指定时间以前的提交 |
–author | 仅显示做者匹配指定字符串的提交 |
–committer | 仅显示提交者匹配指定字符串的提交 |
–grep | 仅显示提交说明中包含指定字符串的提交 |
-S | 仅显示添加或删除内容匹配指定字符串的提交 |
相似 --since
和 --until
这种按照时间做限制的选项颇有用
例如,下面的命令会列出最近两周的全部提交:
$ git log --since=2.weeks
该命令可用的格式十分丰富——能够是相似 “2014-11-10
” 的具体的某一天
也能够是相似 “2 years 1 day 3 minutes ago
” 的相对日期
还能够过滤出匹配指定条件的提交
用 --author
选项显示指定做者的提交
用 --grep
选项搜索提交说明中的关键字
请注意,若是要 同时对做者和提交说明进行过滤 就必须添加 –all-match 选项
不然该命令将会匹配知足其中任意一个条件的提交
另外一个很是有用的过滤器是 -S
它接受一个字符串参数,而且只会显示那些添加或删除了该字符串的提交
假设想找出添加或删除了对某一个特定函数的引用的提交,能够调用:
$ git log -Sfunction_name
若是只关心某些文件或者目录的历史提交
能够在 git log 选项的最后指定它们的路径(path)
由于是放在最后位置上的选项
因此用两个短划线(–)隔开以前的选项和后面限定的路径名
若是要查看 2008 年 10 月期间 Git 源代码仓库中
由 Junio Hamano 提交的修改了测试文件而且还没有合并的提交,能够使用下面的命令:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/ 5610e3b - Fix testcase failure when extended attributes are in use acd3b9e - Enhance hold_lock_file_for_{update,append}() API f563754 - demonstrate breakage of detached checkout with symbolic link HEAD d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths 51a94af - Fix "checkout --track -b newbranch" on detached HEAD b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
在近 40000 条提交中,上面的输出仅列出了符合条件的 6 条记录
参考: git
以上内容,均根据git官网介绍删减、添加和修改组成
相关推荐:
Git笔记(5) 状态记录
Git笔记(4) 获取仓库
Git笔记(3) 安装配置
Git笔记(2) 入门认知
Git笔记(1) 版本控制
谢谢