# git log

git log的本质是展示提交信息。

但是该命令配合一些参数,可以如同 git rev-list 一样控制输出哪些提交和提交的显示方式,也可以如同 git diff-* 一样决定怎样显示每个提交的修改内容。

是不是非常惊讶了?另外 git rev-list这个命令是什么鬼?我至今未用过,先当作黑盒不管它了。由此可见,关于 git log 这个命令我们真的应该重新认识一下它

git log --oneline --stat --no-merges -p -n 2 --graph

# Commit Limiting(过滤提交的)

提交太多了,不好找,就需要用一些特别的参数帮忙限制一下输出。例如只想找昨天的,只想找小明的,只想修改过A.txt 文件的等等各种只想,只要你敢想,基本都能实现。

# Search-作者

//命令格式
git log  --author=<pattern>
git log --committer=<pattern>

//示例
git log --author=“小明”
git log --author=“小明\|小红”
1
2
3
4
5
6
7

# Search-作者

//某个日期之后
git log --since=<date>
git log --after=<date>

//某个日期之前
git log --until=<date>
git log --before=<date>


如果你想要一个具体的时间区间的,可以把这个参数组合起来的,例如下面的命令:

//查出 03.12-03.18 期间的提交
git log --since="2018.03.12" --until="2018.03.18"
1
2
3
4
5
6
7
8
9
10
11
12
13

# Search-提交信息

git log --grep=<pattern>

//示例
git log --grep='喜欢' --oneline

1
2
3
4
5

# Search-修改内容

一般情况下,我们想找一个提交,大多是为了某个修改去找,这个修改对应要么是具体的文件,要么是具体的修改的内容。放心,这个条件也支持。

//文件
git log [\--] <path>…​

//示例
git log --oneline -- 11.txt


1
2
3
4
5
6
7

# 修改内容

//查看某个字符串的变动历史提交
git log -S<string>
//查看某符合某一个正则表达式内容的变动历史提交  
git log -G<regex>


//例子
git log -S"喜欢你" --oneine
1
2
3
4
5
6
7
8

# Search-合并相关的提交 & 文件

工作中,分支之间的合并,往往不是 fast-forword,而是 recursive strategy merge 策略式合并,所以会在历史中出现很多合并提交。运用下面的命令,你可以选择只看合并提交,或者非合并提交。

//查看合并提交
git log --merges

//查看非合并提交
git log --no-merges


//查看发生合并冲突的文件
git log --merge

1
2
3
4
5
6
7
8
9
10

查看哪个人修改了哪个文件

git log --stat  -- src/app/payingMembers-ceshi/js
1

在指定的文件中查找哪个字段的改动信息

git log -S"另存为" -p  -- ./src/views/event/index.vue
1

# 官方文档