巧用git日志查看项目具体目录的提交历史

158 阅读3分钟

一般情况下,使用git clone 链接地址命令,就可以将项目拉取到我们本地。但很多大型的项目都不是一次性commit就完事了,而是累足成步,每个成功的项目都源自一次次的commit完善。我们可以直接在网站中点击commits查看历史提交记录,或者在拉取项目后,使用git log命令,这2种方法都可以粗略地看到每次commit的作者和日期。注意使用git log命令的时候,如果日志过长,会在最下方一行显示:符号,可以使用键盘的上下箭头进行滚动查看,输入q可以退出日志浏览。

查看项目中某个目录下的提交历史

我们输入git log --help,可以在弹出的帮助文档中看到:

Trace the evolution of the line range given by  <start>,<end>, or by the function name regex  <funcname> , within the  <file> . You may not give any pathspec limiters. This is currently limited to a walk starting from a single revision, i.e., you may only give zero or one positive revision arguments, and <start>  and <end>  (or <funcname> ) must exist in the starting revision. You can specify this option more than once. Implies --patch. Patch output can be suppressed using --no-patch, but other diff formats (namely --raw--numstat--shortstat--dirstat--summary--name-only--name-status--check) are not currently implemented.

因此,我们可以加入参数--name-status,并在其后加上目录路径,来追踪某个目录下所有文件的提交历史,或者加入目录路径下的具体文件名来追踪该文件的提交历史。比如命令$ git log --name-status --oneline -- source/ocotillo/dygraph/layout/fdl/modular。这里我们额外使用--oneline参数后,git log信息会变得非常简洁,默认只展示简短的commit id和提交注释。与之相对的是默认参数--format,会将所有信息完整打印出来。
无论使用哪个,日志会以时间排序的方式呈现,最近的日志记录在最上边。
在日志记录中,每次commit涉及到的文件,其名称前面会有一个大写字母的符号表示,其含义是:

A:增加的文件
C:文件的一个新拷贝
D:删除的一个文件
M:文件的内容或者mode被修改了
R:文件名被修改了,注意这里的文件名包括目录路径的名称,文件被移动到其他位置也视为文件名被修改
T:文件的类型被修改了
U:文件没有被合并(需要先完成合并,之后才能进行提交)
X:未知状态。(可能遇到bug,可以向git提交bug report)

另外,如果使用的是IDEA开发工具的话,可以在Git窗口中直接点击查看每次的提交记录即可。

日志文件的输出

在控制台进行日志查看有点不方便,我们要将其输出到本地的txt格式文件中,可使用简单的git log > log.txt命令。同样地,如果只想输出某个文件或目录的提交日志,一样是在后面加上> 输出的本地文件名,如git log --name-status --oneline -- source/ocotillo/dygraph/layout/fdl/modular > fileLog.txt