如何使用git log命令

来自百问网嵌入式Linux wiki


前言

git log(git-log - Show commit logs)顾名思义就是显示提交日志的意思。
如果我们想要了解当前的代码仓库的工作日志(提交日志)就需要用到 git log 命令。
git log 可以帮助很方便地查看日志,可以根据自己需要,将日志按照特定格式显示,或者输出某种格式等。
在使用之前,先查看其帮助信息,这将有助于我们更好的理解这个命令:
    book@www.100ask.org:~/tmp/Embedded-Linux-ADCMSE$ git log -h
    usage: git log [<options>] [<revision-range>] [[--] <path>...]
    or: git show [<options>] <object>...

        -q, --quiet           suppress diff output
        --source              show source
        --use-mailmap         Use mail map file
        --decorate[=...]      decorate options
        -L <n,m:file>         Process line range n,m in file, counting from 1

    book@www.100ask.org:~/tmp/Embedded-Linux-ADCMSE$
可见帮助信息中给出了两个用法:git log 以及 git show。本文只着重讲解 git log 的常用操作,其足够我们应对日常项目,git show 用法暂不列出。

git log

不带任何参数,直接执行 git log 命令将会一下面的格式输出所有的日志。
spacebar 下翻页
b 上翻页
向上方向键 向上逐行查看
向下方向键 向下逐行查看
q 退出
    book@www.100ask.org:~/tmp/Embedded-Linux-ADCMSE$ git log
    commit e0ad5d61d0f315bc5d74adba9ab70452fdc6338b
    Author: YobeZhou <smilezyb@163.com>
    Date:   Fri Jan 3 16:49:10 2020 +0800

        update files
    commit b19f0c472c031180e6bb8a6e5a8e0199bdf5d146
    Author: YobeZhou <smilezyb@163.com>
    Date:   Fri Jan 3 16:33:36 2020 +0800

        更新 source/download/download.md 文件

    commit aaa22f7a170e655e171d1f92da31ec40ce67425f
    Author: YobeZhou <smilezyb@163.com>
    Date:   Fri Jan 3 16:31:29 2020 +0800

        更新下载链接
    ......

git log --online

执行时加入 --oneline 参数会将每次更改的更改日志输出为一行,一目了然。这种方法适用于当日志比较多、只想了解每次的更改报告的情况。
    book@www.100ask.org:~/tmp/Embedded-Linux-ADCMSE$ git log --oneline
    e0ad5d6 update files
    1ea190e 删除 source/download/download.md 文件 更新 source/download/download.html 文件
    b19f0c4 更新 source/download/download.md 文件
    aaa22f7 更新下载链接
    5385ea2 添加文件:      [韦东山] 嵌入式Linux应用开发完全手册第2版.epub  [韦东山] 嵌入式Linux应用开发完全手册第2版.zip
    12a59c0 添加PDF文件
    4e48077 Add download page.
    c13de02 Update book
    5aab338 Solve the problem of picture display in the fifth text.
    163c3fe first commit
    book@www.100ask.org:~/tmp/Embedded-Linux-ADCMSE$

git log -[length]

git log -[length] 的作用和 git log 是一样的,不同的是 -[length] 参数是用于指定只显示多少条日志,可配合 --online 参数使用。
   git log --oneline -2

git log --skip=[skip]

在使用 git log 时可加入 --skip=[skip] 参数,这样可以跳过指定的前面 [skip] 条日志。
   git log --skip=1 -2 --oneline

git log --pretty=raw

--pretty=raw 参数与 --online 参数恰恰相反,--pretty=raw则会显示出关于每次提交的更详细的信息
* 提交ID(commit)
* 文件树ID(tree)
* 父提交ID(parent)
* 作者(author)
* 提交者(committer)
示例:
   git log --pretty=raw -1


git log -p

使用 -p 参数可得到关于改动记录的更详细的信息,相当于多次使用 git show [commit_id] 。
   git log -1 -p

git log --graph

graph就是图表的意思,因此使用 --graph 参数可以得到整理好了的提交线索,如果由合并提交的话,也会显式显示出来:
   git log --graph --oneline

git log --name-status

--name-status 参数会给出每次提交对应改动的文件,一般配合 --oneline 参数使用。
   git log --name-status --oneline

筛选 git 日志

一个 git 项目仓库中的提交日志可能会非常多,我们往往需要有针对性地查看 git 日志。

根据作者筛选

当需要查看提交记录中某个人地提交记录,可以使用下面地命令快速的筛选出你需要的信息:
   git log --author [author_name]

根据 commit 关键字筛选

使用下面的命令,可以从提交的关键字中抓取匹配的对应 commit 项。
   git log --grep [keywords]

根据文件名筛选

这个功能对于我们查看某个文件的更改过程非常有用,这样我们就可以从到到尾了解到这个文件的修改过程:
   git log -p -- [filename]
最后通过组合使用 --auther、--grep、-p这几个参数,几乎能满足大部分检索需求了。