目录

git log详解

[TOC]

简化输出

1
2
3
4
5
6
$ git log --oneline
818c5fa (HEAD -> master) aaaaaaa
2e1b4bc add t4
8262ea4 add t3
f2b85bf 2
01d308a first commit

或者

1
2
3
4
5
6
$ git log --pretty=oneline
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit

HEAD -> master表示当前HEAD处在这个分支下的这个commit。

指定输出行数

1
2
3
4
$ git log --pretty=oneline -3
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3

限定指定日期范围的log

1
2
$ git log --pretty=oneline --after='12-8-2020 00:00:00'
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa

–since --before --until --after

不填时分秒则为当前时刻。

输出具体变动内容

-p:控制输出每个commit具体修改的内容,输出的形式以diff的形式给出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ git log -p --pretty=oneline --after='12-8-2020 00:00:00' 
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
diff --git a/q/w/t4.txt b/q/w/t4.txt
index 9513262..052e4e1 100644
--- a/q/w/t4.txt
+++ b/q/w/t4.txt
@@ -1 +1 @@
-t4
\ No newline at end of file
+t4xx
\ No newline at end of file

同样是用来看改动的相对信息的,--stat-p的输出更简单一些

查看某次提交的改动

git show命令同git log -p输出类似,只不过它只显示一个commit的内容,如果不指定commit hash, 它默认输出HEAD指向commit的内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ git show
commit 818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master)
Author: phprao <ruFMskQ0>
Date:   Tue Dec 8 10:49:12 2020 +0800

    aaaaaaa

diff --git a/q/w/t4.txt b/q/w/t4.txt
index 9513262..052e4e1 100644
--- a/q/w/t4.txt
+++ b/q/w/t4.txt
@@ -1 +1 @@
-t4
\ No newline at end of file
+t4xx
\ No newline at end of file

指定某个提交

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ git show 6f43203cf463dc5320916f96abef0f1ad63428fd
commit 6f43203cf463dc5320916f96abef0f1ad63428fd (b1)
Author: phprao <ruFMskQ0>
Date:   Tue Dec 8 10:12:28 2020 +0800

    xx

diff --git a/q/w/t4.txt b/q/w/t4.txt
index 052e4e1..dab0730 100644
--- a/q/w/t4.txt
+++ b/q/w/t4.txt
@@ -1 +1,2 @@
-t4xx
\ No newline at end of file
+t4xx
+cccccccc
\ No newline at end of file

输出汇总信息,以作者进行分类

git shortlog

这个命令用来输出汇总信息,以作者进行分类。

1
2
3
4
5
6
7
$ git shortlog
phprao (5):
      first commit
      2
      add t3
      add t4
      aaaaaaa

git shortlog -s:可以用来统计每个作者的commit数量

git shortlog -n:可以用来对统计的量进行倒序排列

输出给定的用户提交

--author用来过滤commit,限定输出给定的用户

1
2
3
4
5
6
$ git log --pretty=oneline --author='phprao'
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit

控制是否显示merge的commit

-–merges或者–-no-merges

--decorate

该参数用来控制log输出时,显示对应commit所属的branch和tag信息

1
2
3
4
5
6
7
commit e8848b86cc7f44dba4e2238c6ddd0ccaf69fa270
Author: lienhui <enhui.li@amh-group.com>
Date:   Mon Dec 20 11:08:52 2021 +0800

    Revert "去SNAPSHOT"
    
    This reverts commit eb5c04aec12081bad82845f6aa042702d9eb055a.

加了--decorate之后

1
2
3
4
5
6
7
commit e8848b86cc7f44dba4e2238c6ddd0ccaf69fa270 (HEAD -> feature-20211022-60675-signAndRescindMsgMigration)
Author: lienhui <enhui.li@amh-group.com>
Date:   Mon Dec 20 11:08:52 2021 +0800

    Revert "去SNAPSHOT"
    
    This reverts commit eb5c04aec12081bad82845f6aa042702d9eb055a.

图形化地表示出分支合并历史

--graph

该参数用来控制log输出时,显示对应commit所属的branch和tag信息

git log模板

Many of the answers here are great, but for those that just want a simple one-line-to-the-point answer without having to set up aliases or anything extra, here it is:

1
git log --all --decorate --oneline --graph

Not everyone would be doing a git log all the time, but when you need it just remember:

A Dog” = git log –all –decorate –oneline –graph

其实可以直接使用tig。

输出指定分支的提交记录

git log branchname

1
2
3
4
5
6
7
$ git log b1 --pretty=oneline
6f43203cf463dc5320916f96abef0f1ad63428fd (b1) xx
adda355046920ae91118cf42ec2f45190b0ec89c test
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit

git log --oneline branch1 ^branch2可以查看在分支1,却不在分支2中的提交.^表示排除这个分支

1
2
3
$ git log master ^b1 --pretty=oneline
faa4214bc342ade5693a7efc8a64e869965c039e (HEAD -> master) fix conflict
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf aaaaaaa

根据comment信息过滤

--grep

1
2
$ git log --pretty=oneline --grep=test
adda355046920ae91118cf42ec2f45190b0ec89c test

例如统计冲突数

1
$ git shortlog -s --grep="Conflicts"

http://img.cana.space/picStore/20211220160827.png

默认情况下, git log --grep --author是OR的关系,即满足一条即被返回,如果你想让它们是AND的关系,可以加上–all-match的option

查看某个文件的提交记录

1
git log -- a/b/c.txt

查看某个文件的改动内容

比如你刚拉取了代码,发现其他人有提交改动,你想看看某个文件在最近一次提交改动了啥。

1
git log -p a/b/c.txt

会以倒序的方式以commit为单位列出此文件的改动内容,也就是最近的改动在前面;但是如果我只想看最近的一次呢。可以设置显示数量-1

1
git log -p -1 a/b/c.txt

我们知道git show也能显示改动内容,所以也可以这么写,但是这样貌似麻烦了一点。

1
git show afb2b79f3165b7ac570878a874b4dd236107c783 a/b/c.txt