git log
命令查看提交历史,通过带不同参数来控制显示的内容和方式。
不用任何参数
git log
会按 提交时间(最晚在前)显示所有提交记录,包括 SHA-1 校验和、作者名字 、电子邮件地址、提交时间、提交说明。1
2
3
4
5
6
7
8
9
10
11
12
13git 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
19git 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
13git 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
4git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commitformat
,定制要显示的记录格式1
2
3
4
5git 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
18git 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
26git 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
26git 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 | 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/ |