git基础(3)-查看提交历史

git log 命令查看提交历史,通过带不同参数来控制显示的内容和方式。

  • 不用任何参数
    git log 会按 提交时间(最晚在前)显示所有提交记录,包括 SHA-1 校验和、作者名字 、电子邮件地址、提交时间、提交说明。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ git log
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date: Mon Mar 17 21:52:11 2008 -0700
    changed the version number
    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gee-mail.com>
    Date: Sat Mar 15 16:40:33 2008 -0700
    removed unnecessary test
    commit a11bef06a3f659402fe7563abf99ad00de2209e6
    Author: Scott Chacon <schacon@gee-mail.com>
    Date: Sat Mar 15 10:31:28 2008 -0700
    first commit
  • -p ,显示 每次 提交内容差异

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    git log -p
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date: Mon Mar 17 21:52:11 2008 -0700
    changed the version number

    diff --git a/Rakefile b/Rakefile // git格式的diff,进行比较的文件,a版本的Rakefile(变动前),b版本的Rekefile(变动后)
    index a874b73..8f94139 100644 // 两个版本的哈希(index区的a874b73对象,8f94139对象比较),最后6位数字是对象的模式(普通文件,644权限)
    --- a/Rakefile // 变动前文件
    +++ b/Rakefile // 变动后文件
    @@ -5,7 +5,7 @@ require 'rake/gempackagetask' // 与 合并格式的 diff 相同(diff-u file1 file2) -5,7 表示 "-":变动前文件,"5":第6行,"7":连续7行, "+":变动后文件
    spec = Gem::Specification.new do |s|
    s.platform = Gem::Platform::RUBY
    s.name = "simplegit"
    - s.version = "0.1.0" // "-" 变动前文件,删除的行
    + s.version = "0.1.1" // "+" 变动后文件,添加的行
    s.author = "Scott Chacon"
    s.email = "schacon@gee-mail.com"
    s.summary = "A simple gem for using Git in Ruby code."
  • --stat, 简略的统计信息
    列出每次提交所修改过 的文件、多少文件被修改、被修改过的文件的哪些行被移除或添加了。最后给出总结。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ git log --stat
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date: Mon Mar 17 21:52:11 2008 -0700
    changed the version number
    Rakefile | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)
    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gee-mail.com>
    Date: Sat Mar 15 16:40:33 2008 -0700
    removed unnecessary test
    lib/simplegit.rb | 5 -----
    1 file changed, 5 deletions(-)
  • --pretty ,使用指定的方式展示提交记录 oneline 将每个提交放在一行。

    1
    2
    3
    4
    $ git log --pretty=oneline
    ca82a6dff817ec66f44342007202690a93763949 changed the version number
    085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
    a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

    format,定制要显示的记录格式

    1
    2
    3
    4
    5
    $ git log --pretty=format:"%h - %an, %ar : %s"

    ca82a6d - Scott Chacon, 6 years ago : changed the version number
    085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
    a11bef0 - Scott Chacon, 6 years ago : first commit
选项 说明
%H commit 的完整哈希字串
%h 简短哈希字串
%an 作者(author)名字
%ae 作者电子邮件地址
%ad 作者修订日期,(可用–date=选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)名字
%ce 提交者电子邮件地址
%cd 提交者修订日期,(可用–date=选项定制格式)
%cr 提交者修订日期,按多久以前的方式显示
%s 提交说明
  • --graph ,图像化的展示分支、合并历史

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ git log --graph
    * commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
    | Author: Scott Chacon <schacon@gmail.com>
    | Date: Mon Mar 17 21:52:11 2008 -0700
    |
    | changed the verison number
    |
    * commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    | Author: Scott Chacon <schacon@gmail.com>
    | Date: Sat Mar 15 16:40:33 2008 -0700
    |
    | removed unnecessary test code
    |
    * commit a11bef06a3f659402fe7563abf99ad00de2209e6
    Author: Scott Chacon <schacon@gmail.com>
    Date: Sat Mar 15 10:31:28 2008 -0700

    first commit
  • --name-only, 仅显示已经修改的文件清单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $ git log --name-only
    commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
    Author: Scott Chacon <schacon@gmail.com>
    Date: Mon Mar 17 21:52:11 2008 -0700

    changed the verison number

    Rakefile

    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gmail.com>
    Date: Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

    lib/simplegit.rb

    commit a11bef06a3f659402fe7563abf99ad00de2209e6
    Author: Scott Chacon <schacon@gmail.com>
    Date: Sat Mar 15 10:31:28 2008 -0700

    first commit

    README
    Rakefile
    lib/simplegit.rb
  • --name-status, 显示新增、修改、删除的文件清单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $ git log --name-status
    commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)
    Author: Scott Chacon <schacon@gmail.com>
    Date: Mon Mar 17 21:52:11 2008 -0700

    changed the verison number

    M Rakefile

    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gmail.com>
    Date: Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

    M lib/simplegit.rb

    commit a11bef06a3f659402fe7563abf99ad00de2209e6
    Author: Scott Chacon <schacon@gmail.com>
    Date: Sat Mar 15 10:31:28 2008 -0700

    first commit

    A README
    A Rakefile
    A lib/simplegit.rb

git log 常用选项(限制输出格式)

选项 说明
-p 显示每次提交之间的差异
–stat 提交文件修改统计信息
–shortstat 只显示–stat 中最后的行数、修改、添加、移除统计
–name-only 仅显示已修改 的文件清单
–abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有 40 个字符
–graph 显示 ASCII 图形表示的 分支 合并历史
–pretty 使用其他格式 显示提交 历史信息。包括 oneline, short,full,fuller,format(后跟指定格式–pretty=format:’%h, %s’)

限制输出

除定制输出格式外,git log 有许多 限定输出长度的选项,也就是只 输出部分提交历史信息。

选项 说明
-(n) 显示最近的 n 条提交
–since,–after 指定时间之后的提交(–since=”2019-02-01 21:00:00”)
–until, –before 指定时间之前的提交
–autor 指定作者相关的提交
–committer 指定提交者相关的提交
–grep 含指定关键字的提交 (在提交说明中搜索关键字)
-S 显示添加或移除某个关键字的提交 (-S 预警查询,找出添加或移除”预警查询”的提交记录)

路径 选项

如果只关心某些文件或目录中的历史提交,可在git log选项的最后指定它们的路径。需要用两个短划线(–)隔开之前的选项和后面跟的路径名

1
2
3
4
$ git log --pretty="%h %s" --author="liuzhenjiang" --since="2019-02-14 21:00:00" --before="2019-02-16" -- ./src/views/early-warning/early-area-control/

84854447 【预警消息】 案件/地域预警消息,状态更新