git log高级使用

-n 查看最近那次的提交信息

1
git log -2 //查看最近2次提交记录

-p 查看某个文件提交的diff

1
git log -p src/index.js

–stat 查看提交的修改文件列表

1
git log -2 --stat # 查看最近两次提交的修改文件列表表

查看某次提交的修改(查看diff)

1
git show <commit id> --stat # --stat 可以不加

– fileName 查看指定文件的提交信息

文件名要放到参数的最后位置,通常在前面加上 -- 并用空格隔开表示是文件。

1
git log -- file1 file2

branchName 查看某个分支上的提交记录

1
git log dev

tagName 查询指定标签的提交记录

1
2
3
4
5
git log v1.0.. 查询从v1.0以后的提交历史记录(不包含v1.0) 
git log test..master 查询master分支中的提交记录但不包含test分支记录
git log master..test 查询test分支中的提交记录但不办含master分支记录
git log master…test 查询master或test分支中的提交记录。
git log test –not master  屏蔽master分支

根据 commit id 或者 HEAD 查询日志

commit id 可以是提交哈希的简写模式,也可以使用HEAD替代。HEAD指向当前分支,HEAD^为最后一个提交,等同于HEAD~1,HEAD~2代表倒数第二次提交

1
git log f52c471

–pretty 按指定格式显示日志信息

可选项有:

oneline, short, medium, full, fuller, email, raw, format
默认为medium,可以通过修改配置文件来指定默认的方式:

1
git log (--pretty=)oneline

常见的 format 选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
选项  说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s subject 提交说明
%d body

事例:

1
2
3
git log --pretty=format:"$h %cn %cr %s"
// 或者
git log --format="$h %cn %cr %s"

自定义 git log –format 后输出内容的颜色

git log --format 后,输出的内容是没有颜色区分的,我们其实是可以给输出的内容自定义颜色,便于让内容更有辨识度。
方法为在 format 的内容选项前,加上 %C() 选项。其中:

  1. 括号内放代表颜色的字符串,颜色字符串支持24位的RGB值(要带#号)
  2. 也可以是以下的颜色名称:
    • normal
    • black
    • red
    • green
    • yellow
    • blue
    • magenta
    • cyan
    • white
  3. 这些颜色名称还可以跟这些修饰属性绑定使用,可叠加多个使用。注意,这些修饰只能修饰前景色:
    • bold // 加粗
    • dim // 颜色减淡
    • ul // 下划线
    • blink // 闪烁效果
    • reverse // 前景色背景色交换
  4. 也可以放两个颜色字符串,第一个将被识别为前景色,第二个将被识别为背景色
  5. 在 git v1.7 版本后,对于 red、green、blue 三个颜色来说,括号是可选的。(但是这样就只能使用一个颜色,即前景色)
  6. 颜色和颜色修饰,是会传播到之后的输出内容样式,除非在内容前或者该内容后,重置颜色和修饰:%Creset。或则剔除修饰:noxxx(xxx 代表修饰名,例如nodim)。所以每设置完一个内容的颜色,最好是在该内容后紧跟一个%Creset,以防影响后面内容的样式。
  7. 重置颜色和剔除修饰也是会传播的。

事例

命令:

1
git log --format="%C(magenta)%h %C(red)%d %C(yellow)(%cr) %C(green)%s"

效果:
git-log--format-with-color1
命令:

1
git log --format="%C(white ul bold magenta)%h%Creset %C(yellow)(%cr)%Creset %C(green)%s%Creset %C(dim)%cd"

效果:
git-log--format-with-color2
命令:

1
git log --format="%C(reverse ul black)%h%Creset %C(yellow)(%cr)%Creset %C(green)%s%Creset %C(dim)%cd"

效果:
git-log--format-with-color3

自定义规则快捷键——别名

每次都要输入这一长串的命令非常繁琐且容易出错,我们可以将调整好的这一串命令保存在git配置文件里,并给它起一个别名,下次只需要输入这个别名,就可以看到符合自己习惯的日志格式和样式了。

  1. 进入~/.gitconfig
  2. 添加:(注意,format后的值必须要用单引号,双引号会报错。)

    1
    2
    [alias]
    logs = log --format='%C(reverse ul red)%h%Creset %cn %C(yellow)(%cr)%Creset %C(green)%s%Creset'
  3. 然后在命令行只需要输入 git logs 就可以得到你要的效果了。

更多详细可查看 git documentation Pretty Formats

–author=someone 查询指定作者的提交记录

1
git log --author=sam

–grep 通过关键字过滤提交日志

1
git log --grep=mod  列出所有包含 mod 字样提交信息的记录

–graph 以简单的图形方式列出提交记录

1
git log --graph

–name-only 列出修改过(新增、修改、删除)的文件清单

1
git log --name-only --oneline

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
44032af (HEAD -> master, origin/master) add timeout error handler
src/utils/http.js
92e2cf5 update readme
README.md
64ed4bd make http request with wrapped api function
src/views/Home.vue
0f0aad3 wrap apis
src/api/home.js
src/api/index.js
4a14830 wrap axios
package-lock.json
package.json
src/utils/http.js
0de3bde get prepared
.browserslistrc
.editorconfig
.eslintrc.js
.gitignore
README.md

–name-status 列出修改过的文件和修改状态

1
git log --name-status

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
44032af (HEAD -> master, origin/master) add timeout error handler
M src/utils/http.js
92e2cf5 update readme
M README.md
64ed4bd make http request with wrapped api function
M src/views/Home.vue
0f0aad3 wrap apis
A src/api/home.js
A src/api/index.js
4a14830 wrap axios
M package-lock.json
M package.json
A src/utils/http.js
0de3bde get prepared
A .browserslistrc
A .editorconfig
A .eslintrc.js
A .gitignore
A README.md