官网:https://git-scm.com/docs/git-rev-list
本文基于官网介绍,结合实例解释 rev-list 的使用
按时间倒序列出 commit(即 reverse-list)
$ git log
E - (HEAD -> master) addE (10/19/2019 13:31:19) <gdeer>
D - addD (10/18/2019 13:31:19) <gdeer>
C - addC (10/17/2019 13:31:19) <tae>
B - addB (10/16/2019 13:31:19) <gdeer>
A - addA (10/15/2019 13:31:19) <tae>
rev-list
展示 D 及其之后的节点。
$ git rev-list D
D
C
B
A
^
展示 D 及其之后的节点,并去除 B 及其之后的节点。
$ git rev-list D ^B
D
C
..
展示B、D之间的节点:(B, D]
与 D ^B 效果相同。
$ git rev-list B..D
D
C
--not
逆转所有的 ^,即将所有的带 ^ 的转为不带 ^ 的,不带 ^ 的转为带 ^ 的。直到遇到下一个 --not
。
$ git rev-list D --not ^C B --not A
$ git rev-list D C ^B A
D
C
...
找出两个节点间的差异。
$ git rev-list A...B
相当于
$ git rev-list A B --not $(git merge-base --all A B)
--all
输出 HEAD 的节点列表。
$ git rev-list E
$ git rev-list --all
E
D
C
B
A
-
-n
--max-count=
限制输出的数量。
$ git rev-list --all -n 2
E
D
--skip=
跳过开头的几个。
$ git rev-list --all -skip 2
C
B
A
--since=
--after=
只输出指定日期及之后的节点, 可以有多种形式,以下都可。
$ git rev-list --all --since "Thu Oct 17 13:31:19 2019 +0800"
$ git rev-list --all --since "1571290279"
$ git rev-list --all --since "10/17/2019 13:31:19"
E
D
C
--until=
--before=
只输出指定日期及之前的节点。
用法同 --since
--max-age=
--min-age=
只输出指定日期之间的节点,只能是时间戳,可以分开用,也可以合起来。
–max-age 相当于 since
–min-age 相当于 until
$ git rev-list --all --max-age=1571290279
E
D
C
--author=
--commiter=
只输出指定作者的节点。如果有多个 --author,匹配其中任意一个即可。
是正则匹配,能匹配到就算。
$ git rev-list --all --author=e
E
D
C
B
A
$ git rev-list --all --author=g.*
E
D
B
--grep=
只输出commit信息能匹配到的节点,如果有多个 --grep,匹配其中任意一个即可。
当带有 --all-match 时,必须匹配所有的 --grep 才输出
$ git rev-list --all --grep=addE
E
--invert-grep
逆转所有的 --grep,不匹配其中任意一个,才输出
$ git rev-list --all --grep=addE --inver-grep
D
C
B
A
-i
--regexp-ignore-case
在进行正则匹配(author、grep)时,忽略大小写。默认是 --basic-regexp,不忽略大小写。
$ git rev-list --all --grep=adde
无输出
$ git rev-list --all --grep=adde -i
E
-E
--extended-regexp
在进行正则匹配(author、grep)时,使用扩展的正则表达式。
默认是基本的正则表达式
-F
--fixed-strings
在进行正则匹配(author、grep)时,使用固定的字符串进行匹配,而不是正则匹配。
$ git rev-list --all --grep=.*E
E
$ git rev-list --all --grep=.*E -F
无输出
-P
--perl-regexp
在进行正则匹配(author、grep)时,使用兼容 Perl 的正则表达式进行匹配。
--remove-empty
当一个节点消失时停止。
--merges
只输出 merge 的节点,相当于 --min-parents=2
--no-merges
不输出 merge 的节点,相当于 --min-parents=1
--min-parents=
--max-parents=
--no-min-parents
--no-max-parents
输出拥有指定数量的父节点的节点。
--max-parents=1 相当于 --no-merges
--min-parents=2 相当于 --merges
--max-parents=0 输出根节点
--min-parents=3 输出所有交叉节点
--no-min-parents 和 --no-max-parents 会恢复限制至默认状态
相当于 --min-parents=0 和 --max-parents=-1
…