Show commit logs 用来查看commit日志
git log -h
usage: git log [<options>] [<revision-range>] [[--] <path>...]
or: git show [<options>] <object>...
-q, --quiet suppress diff output
--source show source
--use-mailmap Use mail map file
--decorate-refs <pattern>
only decorate refs that match <pattern>
--decorate-refs-exclude <pattern>
do not decorate refs that match <pattern>
--decorate[=...] decorate options
-L <n,m:file> Process line range n,m in file, counting from 1
$ git log
commit 818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master)
Author: phprao <ruFMskQ0>
Date: Tue Dec 8 10:49:12 2020 +0800
aaaaaaa
commit 2e1b4bced0f0ce2c20362789be2878b36c6910f7
Author: phprao <ruFMskQ0>
Date: Mon Dec 7 16:14:20 2020 +0800
add t4
commit 8262ea4e39ea80dc56056a667e9dbdcd235efc08
Author: phprao <ruFMskQ0>
Date: Mon Dec 7 15:22:32 2020 +0800
add t3
commit f2b85bf7f7516a6a6a0768e44266d09414b03a2e
Author: phprao <ruFMskQ0>
Date: Mon Dec 7 15:10:04 2020 +0800
2
commit 01d308a7ef190b881969ea9b9112424819ab346a
Author: phprao <ruFMskQ0>
Date: Mon Dec 7 14:24:03 2020 +0800
first commit
$ git log --oneline
818c5fa (HEAD -> master) aaaaaaa
2e1b4bc add t4
8262ea4 add t3
f2b85bf 2
01d308a first commit
或者
$ git log --pretty=oneline
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit
HEAD -> master
表示当前HEAD处在这个分支下的这个commit。
$ git log --pretty=oneline -3
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
$ git log --pretty=oneline --after='12-8-2020 00:00:00'
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
–since --before --until --after
不填时分秒则为当前时刻。
-p
:控制输出每个commit具体修改的内容,输出的形式以diff的形式给出。
$ 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的内容.
$ 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
指定某个提交
$ 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
phprao (5):
first commit
2
add t3
add t4
aaaaaaa
git shortlog -s
:可以用来统计每个作者的commit数量
git shortlog -n
:可以用来对统计的量进行倒序排列
加--author
用来过滤commit,限定输出给定的用户
$ git log --pretty=oneline --author='phprao'
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit
–merges或者
–no-merges
该参数用来控制log输出时,显示对应commit所属的branch和tag信息
–graph
$ git log --pretty=oneline --graph
* faa4214bc342ade5693a7efc8a64e869965c039e (HEAD -> master) fix conflict
|\
| * 6f43203cf463dc5320916f96abef0f1ad63428fd (b1) xx
| * adda355046920ae91118cf42ec2f45190b0ec89c test
* | 818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf aaaaaaa
|/
* 2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
* 8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
* f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
* 01d308a7ef190b881969ea9b9112424819ab346a first commit
git log branchname
$ 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中的提交.^表示排除这个分支
$ git log master ^b1 --pretty=oneline
faa4214bc342ade5693a7efc8a64e869965c039e (HEAD -> master) fix conflict
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf aaaaaaa
–grep
$ git log --pretty=oneline --grep=test
adda355046920ae91118cf42ec2f45190b0ec89c test
默认情况下, git log --grep --author是OR的关系,即满足一条即被返回,如果你想让它们是AND的关系,可以加上–all-match的option
git log -- a/b/c.txt
比如你刚拉取了代码,发现其他人有提交改动,你想看看某个文件在最近一次提交改动了啥。
git log -p a/b/c.txt
会以倒序的方式以commit为单位列出此文件的改动内容,也就是最近的改动在前面;但是如果我只想看最近的一次呢。可以设置显示数量-1
git log -p -1 a/b/c.txt
我们知道git show也能显示改动内容,所以也可以这么写,但是这样貌似麻烦了一点。
git show afb2b79f3165b7ac570878a874b4dd236107c783 a/b/c.txt
的确在查看提交记录的时候,纯文本的表示方式在阅读的时候效率有点低,尤其是当提交记录越来越多的时候,这是和SVN的直观式的图形界面相比,比如有一个场景,我想查看某次提交修改了哪些文件(而不关心修改的内容),我可以使用 git show
或者 git log -1 -p
但是他们都会 diff
并输出具体的变动内容,然后我需要一直翻到最后才行看完,效率很低,而我只需要它给我列出修改了哪些文件即可。此时可以使用 gitk
命令来更好的查看。
可以理解为 gitk <==> git log
后面的参数和 git log
一样,凡是 git log 可以用的选项也都能用在 gitk 上。
比如
gitk
gitk -3
gitk --author='phprao'
...
gitk 会弹出一个窗口图形化的展示提交记录
如果出现gitk中文乱码问题,打开git的配置文件(根据自己安装的git目录,此处为安装在D盘):D:\Program Files\Git\etc\gitconfig
在文件内追加以下内容:
[gui]
encoding = utf-8