?
This document uses PHP Chinese website manual Release
git-rev-list - 按反向時(shí)間順序列出提交對(duì)象
git rev-list [ --max-count=<number> ] [ --skip=<number> ] [ --max-age=<timestamp> ] [ --min-age=<timestamp> ] [ --sparse ] [ --merges ] [ --no-merges ] [ --min-parents=<number> ] [ --no-min-parents ] [ --max-parents=<number> ] [ --no-max-parents ] [ --first-parent ] [ --remove-empty ] [ --full-history ] [ --not ] [ --all ] [ --branches[=<pattern>] ] [ --tags[=<pattern>] ] [ --remotes[=<pattern>] ] [ --glob=<glob-pattern> ] [ --ignore-missing ] [ --stdin ] [ --quiet ] [ --topo-order ] [ --parents ] [ --timestamp ] [ --left-right ] [ --left-only ] [ --right-only ] [ --cherry-mark ] [ --cherry-pick ] [ --encoding=<encoding> ] [ --(author|committer|grep)=<pattern> ] [ --regexp-ignore-case | -i ] [ --extended-regexp | -E ] [ --fixed-strings | -F ] [ --date=<format>] [ [ --objects | --objects-edge | --objects-edge-aggressive ] [ --unpacked ] ] [ --pretty | --header ] [ --bisect ] [ --bisect-vars ] [ --bisect-all ] [ --merge ] [ --reverse ] [ --walk-reflogs ] [ --no-walk ] [ --do-walk ] [ --count ] [ --use-bitmap-index ] <commit>… [ -- <paths>… ]
通過(guò)跟蹤parent
來(lái)自給定提交的鏈接可以訪問(wèn)的列表提交,但排除可從其^
前面提供的提交可訪問(wèn)的提交。默認(rèn)情況下,輸出按照時(shí)間倒序排列。
你可以把它看作一個(gè)集合操作。在命令行中提交的提交形成了一組可從其中任何一個(gè)可訪問(wèn)的提交,然后^
從該集合中減去前面給出的任何提交的提交。其余的提交是命令輸出中的內(nèi)容??梢允褂酶鞣N其他選項(xiàng)和路徑參數(shù)來(lái)進(jìn)一步限制結(jié)果。
因此,下面的命令:
$ git rev-list foo bar ^baz
意思是“列出所有可從foo
或可獲取的提交bar
,但不能從baz
” 提交。
可以使用特殊的符號(hào)“ <commit1>
.. <commit2>
”作為“^'<commit1>' <commit2>
”的縮寫(xiě)。例如,下列任何一種可以互換使用:
$ git rev-list origin..HEAD $ git rev-list HEAD ^origin
另一種特殊的符號(hào)是“ <commit1>
...... <commit2>
”,這是合并有用。所得到的提交集合是兩個(gè)操作數(shù)之間的對(duì)稱差異。以下兩個(gè)命令是等效的:
$ git rev-list A B --not $(git merge-base --all A B) $ git rev-list A...B
rev-list
是一個(gè)非常重要的Git命令,因?yàn)樗峁┝藰?gòu)建和遍歷提交血統(tǒng)圖的功能。出于這個(gè)原因,它有很多不同的選項(xiàng),使它可以被不同于git bisect
和的命令使用git repack
。
除了指定應(yīng)使用描述中解釋的特殊符號(hào)列出的提交范圍之外,還可以應(yīng)用其他提交限制。
除非另有說(shuō)明,否則使用更多選項(xiàng)通常會(huì)進(jìn)一步限制輸出(例如--since=<date1>
限制為提交更新<date1>
,并將其與--grep=<pattern>
對(duì)其日志消息具有匹配的提交的進(jìn)一步限制進(jìn)行使用<pattern>
)。
請(qǐng)注意,在提交排序和格式化選項(xiàng)之前應(yīng)用這些選項(xiàng),例如--reverse
。
-<number> -n <number> --max-count=<number>
限制提交輸出的數(shù)量。
--skip=<number>
number
在開(kāi)始顯示提交輸出之前跳過(guò)提交。
--since=<date> --after=<date>
顯示比特定日期更近的提交。
--until=<date> --before=<date>
顯示比特定日期更早的提交。
--max-age=<timestamp> --min-age=<timestamp>
將提交輸出限制在指定的時(shí)間范圍內(nèi)。
--author=<pattern> --committer=<pattern>
將提交輸出限制為與指定模式(正則表達(dá)式)匹配的作者/提交者標(biāo)題行。使用多于一個(gè)--author=<pattern>
,選擇作者匹配任何給定模式的提交(類似地為多個(gè)--committer=<pattern>
)。
--grep-reflog=<pattern>
將提交輸出限制為具有與指定模式(正則表達(dá)式)匹配的reflog條目的提交輸出。使用多于一個(gè)--grep-reflog
,選擇其reflog消息匹配任何給定模式的提交。除非--walk-reflogs
正在使用,否則使用此選項(xiàng)是錯(cuò)誤的。
--grep=<pattern>
將提交輸出限制為符合指定模式(正則表達(dá)式)的日志消息。使用多于一個(gè)--grep=<pattern>
,提交的消息匹配任何給定模式的提交被選中(但請(qǐng)參閱--all-match
)。
--all-match
將提交輸出限制為匹配所有給定的提交--grep
,而不是至少匹配一個(gè)提交。
--invert-grep
將提交輸出限制為與日志消息不匹配的模式--grep=<pattern>
。
-i --regexp-ignore-case
匹配正則表達(dá)式限制模式而不考慮字母大小寫(xiě)。
--basic-regexp
考慮限制模式是基本的正則表達(dá)式; 這是默認(rèn)值。
-E --extended-regexp
考慮限制模式是擴(kuò)展正則表達(dá)式而不是默認(rèn)的基本正則表達(dá)式。
-F --fixed-strings
考慮限制模式為固定字符串(不要將模式解釋為正則表達(dá)式)。
-P --perl-regexp
考慮限制模式是與Perl兼容的正則表達(dá)式。
對(duì)這些類型的正則表達(dá)式的支持是可選的編譯時(shí)間依賴性。如果Git沒(méi)有編譯支持它們,提供這個(gè)選項(xiàng)會(huì)導(dǎo)致它死亡。
--remove-empty
當(dāng)給定的路徑從樹(shù)上消失時(shí)停止。
--merges
僅打印合并提交。這完全一樣--min-parents=2
。
--no-merges
不要打印與多個(gè)父代的提交。這完全一樣--max-parents=1
。
--min-parents=<number> --max-parents=<number> --no-min-parents --no-max-parents
僅顯示至少(或至多)多次父級(jí)提交的提交。特別--max-parents=1
是一樣的--no-merges
,--min-parents=2
是一樣的--merges
。--max-parents=0
給出所有的根提交和--min-parents=3
所有子分支合并。
--no-min-parents
并--no-max-parents
重新設(shè)置這些限制(無(wú)限制)。等價(jià)形式是--min-parents=0
(任何承諾有0或更多父母)和--max-parents=-1
(負(fù)數(shù)表示沒(méi)有上限)。
--first-parent
在查看合并提交后,只跟蹤第一個(gè)父提交。當(dāng)查看特定主題分支的演變時(shí),此選項(xiàng)可以提供更好的概述,因?yàn)楹喜⒌街黝}分支往往只是適應(yīng)不斷更新的上游時(shí)間,并且此選項(xiàng)允許您忽略單獨(dú)提交到你的歷史通過(guò)這樣的合并。不能與--bisect結(jié)合使用。
--not
顛倒^
所有后續(xù)修訂說(shuō)明符的前綴(或缺少)的含義,直到下一個(gè)--not
。
--all
假設(shè)所有的參考文件refs/
,以及HEAD
命令行都列為<commit>
。
--branches=<pattern>
假設(shè)所有的參數(shù)refs/heads
都在命令行中列為<commit>
。如果<pattern>
給出,則將分支限制為與給定shell glob匹配的分支。如果模式?jīng)]有?
,*
或者[
,/*
在結(jié)束時(shí)暗示。
--tags=<pattern>
假設(shè)所有的參數(shù)refs/tags
都在命令行中列為<commit>
。如果<pattern>
給出,則將標(biāo)簽限制為與給定 shell glob 匹配的標(biāo)簽。如果模式?jīng)]有?
,*
或者[
,/*
在結(jié)束時(shí)暗示。
--remotes=<pattern>
假設(shè)所有的參數(shù)refs/remotes
都在命令行中列為<commit>
。如果<pattern>
給出,則將遠(yuǎn)程跟蹤分支限制為與給定shell glob匹配的分支。如果模式?jīng)]有?
,*
或者[
,/*
在結(jié)束時(shí)暗示。
--glob=<glob-pattern>
假設(shè)所有與shell glob匹配的ref <glob-pattern>
都在命令行中列出<commit>
。領(lǐng)導(dǎo)refs/
,如果失蹤,會(huì)自動(dòng)添加前綴。如果模式?jīng)]有?
,*
或者[
,/*
在結(jié)束時(shí)暗示。
--exclude=<glob-pattern>
不包括裁判匹配<glob-pattern>
,未來(lái)--all
,--branches
,--tags
,--remotes
,或--glob
原本考慮。這個(gè)選項(xiàng)排除累積模式到下一個(gè)的重復(fù)--all
,--branches
,--tags
,--remotes
,或--glob
選擇(其他選項(xiàng)或參數(shù)不清除積累的模式)。
給予不應(yīng)該開(kāi)始的模式refs/heads
,refs/tags
或refs/remotes
當(dāng)應(yīng)用到--branches
,--tags
或--remotes
分別,他們必須開(kāi)始refs/
在應(yīng)用于--glob
或--all
。如果尾隨/*
是有意的,則必須明確給出。
--reflog
假設(shè)所有reflog提到的對(duì)象都在命令行中列為<commit>
。
--ignore-missing
在輸入中看到一個(gè)無(wú)效的對(duì)象名稱時(shí),假裝沒(méi)有給出錯(cuò)誤的輸入。
--stdin
除了<commit>
在命令行上列出之外,還要從標(biāo)準(zhǔn)輸入中讀取它們。如果--
看到分隔符,請(qǐng)停止讀取提交并開(kāi)始讀取路徑以限制結(jié)果。
--quiet
不要將任何內(nèi)容打印到標(biāo)準(zhǔn)輸出。這種形式主要是為了允許調(diào)用者測(cè)試退出狀態(tài)以查看一系列對(duì)象是否完全連接(或不是)。/dev/null
由于輸出不需要格式化,因此比重定向 stdout 要快。
--cherry-mark
像--cherry-pick
(見(jiàn)下文)但標(biāo)記等價(jià)提交=
而不是省略它們,以及不等價(jià)的提交+
。
--cherry-pick
當(dāng)提交集合受到對(duì)稱差異限制時(shí),省略任何提交引入與“另一側(cè)”上的另一個(gè)提交相同的更改的提交。
例如,如果您有兩個(gè)分支,A
并且B
只列出所有提交的常用方法--left-right
(請(qǐng)參閱下面的--left-right
選項(xiàng)說(shuō)明中的示例)。但是,它顯示了從其他分支櫻桃挑選的提交(例如,可能會(huì)從分支A挑選“b上的第3個(gè)分支”)。使用這個(gè)選項(xiàng),這樣的提交對(duì)將從輸出中排除。
--left-only --right-only
列表僅在對(duì)稱差異的相應(yīng)側(cè)提交,即只有那些將被標(biāo)記<
為resp的列表。>
通過(guò)--left-right
。
例如,--cherry-pick --right-only A...B
省略了那些從提交B
其在A
或者補(bǔ)丁等同于提交A
。換句話說(shuō),它列出了+
來(lái)自提交git cherry A B
。更準(zhǔn)確地說(shuō),--cherry-pick --right-only --no-merges
給出了確切的清單。
--cherry
的代名詞--right-only --cherry-mark --no-merges
; 有用的是將輸出限制在我們這邊的提交中,并且標(biāo)記那些已經(jīng)應(yīng)用到分叉歷史的另一邊的那些git log --cherry upstream...mybranch
,類似于git cherry upstream mybranch
。
-g --walk-reflogs
而不是走提交祖先鏈,將 reflog 條目從最近的一條走到更舊的條目。當(dāng)使用此選項(xiàng),你不能指定提交排除(也就是^commit
,commit1..commit2
和commit1...commit2
符號(hào)不能使用)。
憑借--pretty
比其他格式oneline
(原因很明顯),這將導(dǎo)致輸出有從引用日志信息采取兩個(gè)額外的線路。輸出中的reflog指示符可能會(huì)顯示為ref@{Nth}
(其中Nth
是 reflog 中的反向按時(shí)間順序的索引)或者ref@{timestamp}
(具有該條目的時(shí)間戳),具體取決于以下幾條規(guī)則:
如果起始點(diǎn)被指定為ref@{Nth}
,則顯示索引格式。
如果起始點(diǎn)被指定為ref@{now}
,則顯示時(shí)間戳記格式。
如果兩者都未使用,但--date
已在命令行中提供,請(qǐng)按照要求的格式顯示時(shí)間戳--date
。
否則,顯示索引格式。
在此之下--pretty=oneline
,提交消息在同一行上以此信息為前綴。該選項(xiàng)不能與--reverse
。另請(qǐng)參閱 git-reflog [1]。
--merge
合并失敗后,顯示引用文件有沖突并且不存在于所有合并頭上。
--boundary
輸出排除邊界提交。邊界提交以前綴-
。
--use-bitmap-index
嘗試使用pack位圖索引加速遍歷(如果有可用的話)。請(qǐng)注意,遍歷時(shí)--objects
,樹(shù)和斑點(diǎn)不會(huì)打印其相關(guān)路徑。
--progress=<header>
在考慮對(duì)象時(shí)顯示stderr的進(jìn)度報(bào)告。該<header>
文本將印有各自的最新進(jìn)展。
有時(shí)你只對(duì)歷史的一部分感興趣,例如修改特定<path>的提交。但是有兩個(gè)部分History Simplification
,一部分是選擇提交,另一部分是如何執(zhí)行,因?yàn)橛懈鞣N策略可以簡(jiǎn)化歷史記錄。
以下選項(xiàng)選擇要顯示的提交:
<paths>
提交修改給定的<路徑>被選中。
--simplify-by-decoration
由某個(gè)分支或標(biāo)簽引用的提交被選中。
請(qǐng)注意,可以顯示額外的提交以提供有意義的歷史記錄。
以下選項(xiàng)會(huì)影響簡(jiǎn)化的執(zhí)行方式:
默認(rèn)模式
將歷史簡(jiǎn)化為解釋樹(shù)的最終狀態(tài)的最簡(jiǎn)單歷史記錄。最簡(jiǎn)單的,因?yàn)槿绻罱K結(jié)果是相同的(即合并具有相同內(nèi)容的分支)
--full-history
與默認(rèn)模式相同,但不修剪某些歷史記錄。
--dense
只顯示選定的提交,另外一些提供有意義的歷史記錄。
--sparse
顯示簡(jiǎn)化歷史記錄中的所有提交。
--simplify-merges
附加選項(xiàng)可--full-history
從結(jié)果歷史記錄中刪除一些不必要的合并,因?yàn)闆](méi)有選定的提交對(duì)此合并作出貢獻(xiàn)。
--ancestry-path
當(dāng)給定一系列提交顯示(例如commit1..commit2
或commit2 ^commit1
)時(shí),僅顯示直接存在于commit1
和之間的祖先鏈上的commit2
提交,即提交都是后代commit1
,以及祖先commit2
。
更詳細(xì)的解釋如下。
假設(shè)你指定foo
為<路徑>。我們將調(diào)用修改的提交foo
!TREESAME 和其余的 TREESAME。(在diff過(guò)濾后foo
,它們分別看起來(lái)不同且相等。)
在下文中,我們將始終引用相同的示例歷史記錄來(lái)說(shuō)明簡(jiǎn)化設(shè)置之間的差異。我們假設(shè)您正在篩選foo
此提交圖中的文件:
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
歷史A --- Q的水平線被認(rèn)為是每個(gè)合并的第一個(gè)父代。提交是:
I
是初始提交,其中foo
存在內(nèi)容“asdf”,文件quux
存在內(nèi)容“quux”。初始提交與空樹(shù)比較,所以I
是!TREESAME。
在中A
,foo
只包含“foo”。
B
包含與。相同的更改A
。它的合并M
是微不足道的,因此 TREESAME 給所有的父母。
C
不會(huì)更改foo
,但其合并N
會(huì)將其更改為“foobar”,因此對(duì)于任何父級(jí),它不是 TREESAME。
D
設(shè)置foo
為“baz”。它的合并O
將來(lái)自N
和D
來(lái)自“foobarbaz” 的字符串結(jié)合起來(lái); 即,它不是任何父母的 TREESAME。
E
更改quux
為“xyzzy”,并將其合并P
為“quux xyzzy”。P
是TREESAME O
,但不是E
。
X
是一個(gè)獨(dú)立的根提交,添加了一個(gè)新文件side
并對(duì)其進(jìn)行了Y
修改。Y
是TREESAME X
。它的合并Q
添加side
到P
,并且Q
是TREESAME P
,但不是Y
。
rev-list
向后瀏覽歷史記錄,包括或不包括基于是否--full-history
和/或父重寫(xiě)(通過(guò)--parents
或--children
)使用的提交。以下設(shè)置可用。
默認(rèn)模式
如果對(duì)任何父項(xiàng)不是 TREESAME,則包含提交(盡管可以更改它,請(qǐng)參見(jiàn)--sparse
下文)。如果提交是一個(gè)合并,并且它是一個(gè)父級(jí)的 TREESAME,則只跟隨該父級(jí)。(即使有幾個(gè) TREESAME父母,請(qǐng)只遵循其中一個(gè)。)否則,請(qǐng)關(guān)注所有父母。
這導(dǎo)致:
.-A---N---O / / / I---------D
請(qǐng)注意,只有遵循 TREESAME父級(jí)(如果有)的規(guī)則B
完全從考慮中移除。C
被認(rèn)為是通過(guò)N
,但是是
TREESAME。根提交與空樹(shù)比較,所以I
是!TREESAME。
父/子關(guān)系僅在可見(jiàn)時(shí)顯示--parents
,但不影響在默認(rèn)模式下選擇的提交,因此我們顯示了父行。
- 沒(méi)有父母重寫(xiě)的完整歷史記錄
此模式與一點(diǎn)默認(rèn)值不同:始終跟隨合并的所有父項(xiàng),即使它們中的一個(gè)為 TREESAME 也是如此。即使合并中有多個(gè)方面都包含提交,但這并不意味著合并本身就是!在這個(gè)例子中,我們得到了
I A B N D O P Q
M
被排除在外,因?yàn)樗鼘?duì)父母都是 TREESAME。E
,C
并且B
都走了,但只能B
是!TREESAME,所以別人不出現(xiàn)。
請(qǐng)注意,如果沒(méi)有父級(jí)重寫(xiě),就不可能談?wù)撎峤恢g的父/子關(guān)系,因此我們將它們顯示為斷開(kāi)連接。
- 父母重寫(xiě)的完整歷史記錄
普通提交只包含在!TREESAME(盡管可以改變,見(jiàn)--sparse
下文)。
合并總是包括在內(nèi)。但是,它們的父級(jí)列表會(huì)被重寫(xiě):沿著每個(gè)父級(jí)刪除未包含在其中的提交。這導(dǎo)致
.-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------'
比較--full-history
上面沒(méi)有重寫(xiě)。請(qǐng)注意,E
因?yàn)樗?TREESAME 而被刪除,但P的父列表被重寫(xiě)為包含E
父項(xiàng)I
。同樣的事情發(fā)生了C
和N
,和X
,Y
和Q
。
除上述設(shè)置外,您還可以更改 TREESAME 是否影響包含:
--dense
如果他們不是TREESAME給任何父母,那么被散步的提交將被包括在內(nèi)。
--sparse
包括所有正在散步的提交。
請(qǐng)注意,如果沒(méi)有--full-history
,這仍然簡(jiǎn)化了合并:如果其中一位父母是 TREESAME,我們只遵循那一個(gè),所以合并的其他方不會(huì)走。
--simplify-merges
首先,--full-history
用父級(jí)重寫(xiě)的方式構(gòu)建一個(gè)歷史圖(參見(jiàn)上文)。
然后根據(jù)以下規(guī)則簡(jiǎn)化每個(gè)提交C
到C'
最終歷史記錄中的替換:
設(shè)置C'
為C
。
替換每個(gè)家長(zhǎng)P
的C'
其簡(jiǎn)化P'
。在這個(gè)過(guò)程中,放棄其他父母祖先或父母的父母將 TREESAME 提交給空樹(shù),并刪除重復(fù)項(xiàng),但請(qǐng)注意永不丟棄所有我們正在處理的父母。
如果在此父代重寫(xiě)之后,C'
是根或合并提交(具有零或> 1父項(xiàng)),邊界提交或!TREESAME,它仍然存在。否則,它將被其唯一的父代替換。
通過(guò)--full-history
與父級(jí)重寫(xiě)進(jìn)行比較,可以很好地顯示此效果。這個(gè)例子變成:
.-A---M---N---O / / / I B D \ / / `---------'
請(qǐng)注意,在重大分歧N
,P
以及Q
在--full-history
:
N
的父母名單已I
被刪除,因?yàn)樗橇硪桓改傅淖嫦?code>M。仍然,N
因?yàn)樗牵?TREESAME。
P
的父母名單也被I
刪除。P
然后被完全刪除,因?yàn)樗幸粋€(gè)父母,并且是 TREESAME。
Q
的父母名單已Y
簡(jiǎn)化為X
。X
然后被刪除,因?yàn)樗且粋€(gè) TREESAME 根。Q
然后被完全刪除,因?yàn)樗幸粋€(gè)父母,并且是TREESAME。
最后,還有第五種可用的簡(jiǎn)化模式:
--ancestry-path
將顯示的提交限制為在給定提交范圍內(nèi)“from”和“to”提交之間直接在祖先鏈上提交的提交。即只顯示作為“to”提交祖先的提交和“提交”提交的后代。
作為示例用例,請(qǐng)考慮以下提交歷史記錄:
D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M
一個(gè)常規(guī)D..M
計(jì)算的是一組祖先的提交M
,但不包括那些祖先的提交D
。這對(duì)于了解發(fā)生在歷史上的事情是有用的,M
因?yàn)?code>D“有什么不M
存在D
”。在這個(gè)例子中的結(jié)果將是所有提交,除了A
和B
(與D
本身,當(dāng)然)。
但是,當(dāng)我們想要查明哪些提交M
受到引入D
并需要修復(fù)的bug的影響時(shí),我們可能只想查看其D..M
實(shí)際后代的子集D
,即排除C
和K
。這正是--ancestry-path
選項(xiàng)所做的。適用D..M
范圍,它導(dǎo)致:
E-------F \ \ G---H---I---J \ L--M
--simplify-by-decoration
通過(guò)省略標(biāo)簽未引用的提交,該選項(xiàng)允許您只查看歷史拓?fù)涞拇髨D。如果(1)它們被標(biāo)簽引用,或者(2)它們改變了命令行給出的路徑的內(nèi)容,則提交被標(biāo)記為!TREESAME(換句話說(shuō),保存在上述歷史簡(jiǎn)化規(guī)則之后)。所有其他提交都標(biāo)記為 TREESAME(可能會(huì)被簡(jiǎn)化)。
--bisect
將輸出限制為一個(gè)提交對(duì)象,該提交對(duì)象大致位于提交和排除提交之間的一半。請(qǐng)注意,壞的等分ref會(huì)refs/bisect/bad
被添加到包含的提交(如果存在)并且好的等分ref refs/bisect/good-*
被添加到排除的提交(如果存在)。因此,假設(shè)沒(méi)有參考refs/bisect/
,如果
$ git rev-list --bisect foo ^bar ^baz
輸出midpoint
,這兩個(gè)命令的輸出
$ git rev-list foo ^midpoint $ git rev-list midpoint ^bar ^baz
長(zhǎng)度大致相同。找到引入回歸的變化因此被簡(jiǎn)化為二分搜索:重復(fù)生成并測(cè)試新的中點(diǎn),直到提交鏈的長(zhǎng)度為1。不能與--first-parent結(jié)合使用。
--bisect-vars
--bisect
除了refs/bisect/
沒(méi)有使用refs in之外,它的計(jì)算方法與之相同,除了輸出的文本已準(zhǔn)備好被shell評(píng)估。這些行將為變量指定中點(diǎn)修訂的名稱bisect_rev
,并且測(cè)試之后bisect_rev
要測(cè)試bisect_nr
的提交的預(yù)期數(shù)量,如果bisect_rev
結(jié)果為是,則要測(cè)試bisect_good
的提交的預(yù)期數(shù)量,提交給被測(cè)試的bisect_rev
結(jié)果是不好的bisect_bad
,以及我們現(xiàn)在平分的提交數(shù)量bisect_all
。
--bisect-all
這將輸出提交對(duì)象之間的所有提交對(duì)象包括和排除提交,按距離排序提交包含和排除。refs/bisect/
沒(méi)有使用參考。離他們最遠(yuǎn)的是最先顯示的。(這是唯一顯示的--bisect
。)
這很有用,因?yàn)樗梢院苋菀椎剡x擇一個(gè)好的提交來(lái)測(cè)試什么時(shí)候你想避免測(cè)試它們中的一些出于某種原因(它們可能不會(huì)編譯)。
--bisect-vars
在這種情況下,此選項(xiàng)可以與所有已排序的提交對(duì)象一起使用,并且會(huì)有與--bisect-vars
單獨(dú)使用相同的文本。
默認(rèn)情況下,提交按反向時(shí)間順序顯示。
--date-order
在顯示所有孩子之前不顯示父母,但在提交時(shí)間戳順序中顯示提交。
--author-date-order
在顯示所有孩子之前不顯示父母,但以作者時(shí)間戳順序顯示提交。
--topo-order
在顯示所有孩子之前不要顯示父母,并且避免在多行歷史記錄中混合顯示提交。
例如,在這樣的提交歷史記錄中:
---1----2----4----7 \ \ 3----5----6----8---
其中數(shù)字表示提交時(shí)間戳的順序,git rev-list
以及具有--date-order
按時(shí)間戳順序顯示提交的朋友:8 7 6 5 4 3 2 1。
與--topo-order
,他們會(huì)顯示8 6 5 3 7 4 2 1(或8 7 4 2 6 5 3 1); 一些較舊的提交顯示在較新的提交之前,以避免將來(lái)自兩條并行開(kāi)發(fā)軌道的提交顯示在一起。
--reverse
以相反的順序輸出選擇顯示的提交(參見(jiàn)上面的提交限制部分)。不能與之結(jié)合--walk-reflogs
。
這些選項(xiàng)主要針對(duì)包裝Git存儲(chǔ)庫(kù)。
--objects
打印列出的提交引用的任何對(duì)象的對(duì)象ID。--objects foo ^bar
因此意味著“如果我有提交對(duì)象bar
但不是我需要下載的所有對(duì)象ID foo
”。
--objects-edge
--objects
與之類似,但也會(huì)打印以“ - ”字符為前綴的排除提交的ID。git-pack-objects [1]使用它來(lái)構(gòu)建一個(gè)“精簡(jiǎn)”包,它基于這些排除的提交中包含的對(duì)象以分離形式記錄對(duì)象,以減少網(wǎng)絡(luò)流量。
--objects-edge-aggressive
--objects-edge
與之類似,但它試圖以增加時(shí)間為代價(jià)尋找被排除的提交。這被用來(lái)代替--objects-edge
淺存儲(chǔ)庫(kù)構(gòu)建“瘦”包。
--indexed-objects
假設(shè)索引使用的所有樹(shù)和斑點(diǎn)都列在命令行上。請(qǐng)注意,您可能也想使用--objects
。
--unpacked
只用于--objects
; 打印不在包裝中的對(duì)象ID。
--no-walk=(sorted|unsorted)
只顯示給定的提交,但不要遍歷其祖先。如果指定了范圍,則這不起作用。如果提供了參數(shù)unsorted
,則提交按照它們?cè)诿钚猩系捻樞蝻@示。否則(如果sorted
或沒(méi)有給出參數(shù)),提交時(shí)間將按提交時(shí)間以反向時(shí)間順序顯示。不能與之結(jié)合--graph
。
--do-walk
Overrides a previous --no-walk
.
使用這些選項(xiàng),git-rev-list [1]的作用類似于更專門的提交日志工具系列:git-log [1],git-show [1]和git-whatchanged [1]
--pretty=<format> --format=<format>
在給定的格式漂亮地打印提交日志中的內(nèi)容,在這里<format>
可以是一個(gè)oneline
,short
,medium
,full
,fuller
,email
,raw
,format:<string>
和tformat:<string>
。什么時(shí)候<format>
沒(méi)有上述情況,并且%placeholder
在其中,它的行為就像--pretty=tformat:<format>
是給予的一樣。
有關(guān)每種格式的其他詳細(xì)信息,請(qǐng)參閱“PRETTY FORMATS”部分。當(dāng)=<format>
零件被省略時(shí),它默認(rèn)為medium
。
注意:您可以在存儲(chǔ)庫(kù)配置中指定默認(rèn)的漂亮格式(請(qǐng)參閱git-config [1])。
--abbrev-commit
不顯示完整的40字節(jié)十六進(jìn)制提交對(duì)象名稱,只顯示部分前綴。非默認(rèn)位數(shù)可以用“--abbrev = <n>”來(lái)指定(如果顯示,它也會(huì)修改差異輸出)。
這應(yīng)該使“--pretty = oneline”對(duì)于使用80列終端的人來(lái)說(shuō)更加可讀。
--no-abbrev-commit
顯示完整的40字節(jié)十六進(jìn)制提交對(duì)象名稱。這種否定--abbrev-commit
和暗示它的選項(xiàng)如“--oneline”。它也覆蓋log.abbrevCommit
變量。
--oneline
這是一起使用的“--pretty = oneline --abbrev-commit”的縮寫(xiě)。
--encoding=<encoding>
提交對(duì)象在其編碼頭中記錄用于日志消息的編碼; 這個(gè)選項(xiàng)可以用來(lái)告訴命令在用戶首選的編碼中重新編寫(xiě)提交日志消息。對(duì)于非管道命令,默認(rèn)為UTF-8。請(qǐng)注意,如果一個(gè)對(duì)象聲稱被編碼X
并且正在輸出X
,我們將逐字輸出對(duì)象; 這意味著原始提交中的無(wú)效序列可能會(huì)被復(fù)制到輸出中。
--expand-tabs=<n> --expand-tabs --no-expand-tabs
<n>
在輸出中顯示日志消息之前,執(zhí)行一個(gè)標(biāo)簽擴(kuò)展(用足夠的空格替換每個(gè)標(biāo)簽以填充下一個(gè)顯示列的倍數(shù))。--expand-tabs
是一種短手--expand-tabs=8
,并且--no-expand-tabs
是一種短手--expand-tabs=0
,即禁用選項(xiàng)卡擴(kuò)展。
默認(rèn)情況下,突片在相當(dāng)格式由4個(gè)空格(即縮進(jìn)日志消息擴(kuò)展medium
,這是缺省值,full
和fuller
)。
--show-signature
通過(guò)簽名傳遞gpg --verify
并顯示輸出來(lái)檢查簽名提交對(duì)象的有效性。
--relative-date
--date=relative
的同義詞。
--date=<format>
僅對(duì)以人可讀格式顯示的日期生效,例如在使用時(shí)--pretty
。log.date
config變量為log命令的--date
選項(xiàng)設(shè)置一個(gè)默認(rèn)值。默認(rèn)情況下,日期顯示在原始時(shí)區(qū)(提交者或作者的)。如果-local
附加到格式(例如,iso-local
),則使用用戶的本地時(shí)區(qū)。
--date=relative
顯示相對(duì)于當(dāng)前時(shí)間的日期,例如“2小時(shí)前”。該-local
選項(xiàng)對(duì)于無(wú)效--date=relative
。
--date=local
是一個(gè)別名--date=default-local
。
--date=iso
(或--date=iso8601
)以ISO 8601格式顯示時(shí)間戳。與嚴(yán)格的ISO 8601格式的不同之處在于:
一個(gè)空格而不是T
日期/時(shí)間分隔符
時(shí)間和時(shí)區(qū)之間的空間
在時(shí)區(qū)的幾小時(shí)和幾分鐘之間不會(huì)冒號(hào)
--date=iso-strict
(或--date=iso8601-strict
)以嚴(yán)格的ISO 8601格式顯示時(shí)間戳。
--date=rfc
(或--date=rfc2822
)顯示RFC 2822格式的時(shí)間戳,通常在電子郵件中找到。
--date=short
僅以YYYY-MM-DD
格式顯示日期,但不顯示時(shí)間。
--date=raw
將時(shí)間顯示為從時(shí)代(1970-01-01 00:00:00 UTC)開(kāi)始的秒數(shù),后跟一個(gè)空格,然后將時(shí)區(qū)作為UTC的偏移量(a +
或-
四位數(shù);前兩個(gè)是小時(shí),并且第二個(gè)是分鐘)。即,如果時(shí)間戳被格式化strftime("%s %z")
)。請(qǐng)注意,該-local
選項(xiàng)不會(huì)影響自始至終的秒數(shù)值(始終以UTC來(lái)衡量),但會(huì)切換隨附的時(shí)區(qū)值。
--date=unix
將日期顯示為Unix紀(jì)元時(shí)間戳(1970年以來(lái)的秒數(shù))。與之相同--raw
,這總是以UTC表示,因此-local
不起作用。
--date=format:...
將格式輸入...
到系統(tǒng)中strftime
,除了內(nèi)部處理的%z和%Z之外。用于--date=format:%c
以系統(tǒng)區(qū)域設(shè)置的首選格式顯示日期。請(qǐng)參閱strftime
手冊(cè)以獲取格式占位符的完整列表。使用時(shí)-local
,正確的語(yǔ)法是--date=format-local:...
。
--date=default
是默認(rèn)格式,類似于--date=rfc2822
,但有一些例外:
星期幾之后沒(méi)有逗號(hào)
使用本地時(shí)區(qū)時(shí)省略時(shí)區(qū)
--header
以原始格式打印提交的內(nèi)容; 每個(gè)記錄都用NUL字符分隔。
--parents
也打印提交的父母(以“commit parent ...”的形式)。還允許父級(jí)重寫(xiě),請(qǐng)參見(jiàn)History Simplification
下文。
--children
也打印提交的子代(以“commit child ...”的形式)。還允許父級(jí)重寫(xiě),請(qǐng)參見(jiàn)History Simplification
下文。
--timestamp
打印原始提交時(shí)間戳。
--left-right
標(biāo)記可以從中提交提交的對(duì)稱差異的哪一側(cè)。來(lái)自左側(cè)的提交將以前面的<
和前面的提交>
。如果合并--boundary
,那些提交前綴為-
。
例如,如果你有這個(gè)拓?fù)洌?/p>
y---b---b branch B / \ / / . / / \ o---x---a---a branch A
你會(huì)得到這樣的輸出:
$ git rev-list --left-right --boundary --pretty=oneline A...B >bbbbbbb... 3rd on b >bbbbbbb... 2nd on b <aaaaaaa... 3rd on a <aaaaaaa... 2nd on a -yyyyyyy... 1st on b -xxxxxxx... 1st on a
--graph
在輸出的左側(cè)繪制提交歷史記錄的基于文本的圖形表示。這可能會(huì)導(dǎo)致在提交之間打印額外的行,以便正確繪制圖表歷史記錄。不能與之結(jié)合--no-walk
。
這可以讓父母重寫(xiě),見(jiàn)History Simplification
下文。
這意味著--topo-order
默認(rèn)情況下該選項(xiàng),但--date-order
也可以指定該選項(xiàng)。
--show-linear-break=<barrier>
當(dāng)不使用--graph時(shí),所有歷史分支都會(huì)變平,這使得很難看到兩個(gè)連續(xù)的提交不屬于線性分支。在這種情況下,這個(gè)選項(xiàng)在它們之間設(shè)置了一個(gè)障礙。如果<barrier>
指定,則是將顯示的字符串而不是默認(rèn)的字符串。
--count
打印一個(gè)數(shù)字,說(shuō)明有多少提交將被列出,并禁止所有其他輸出。與其一起使用時(shí)--left-right
,將打印左側(cè)和右側(cè)提交的計(jì)數(shù),并用制表符分隔。與--cherry-mark
這些計(jì)數(shù)一起使用時(shí),省略補(bǔ)丁等價(jià)提交,并打印由選項(xiàng)卡分隔的等價(jià)提交的計(jì)數(shù)。
如果提交是合并,并且不是美觀格式oneline
,email
或者raw
在該Author:
行之前插入額外的線條。該行以“Merge:”開(kāi)始,并且祖先提交的sha1被打印出來(lái),用空格分隔。請(qǐng)注意,如果您限制了對(duì)歷史的查看,列出的提交可能不一定是直接父提交的列表:例如,如果您只對(duì)與某個(gè)目錄或文件相關(guān)的更改感興趣。
有幾種內(nèi)置格式,你可以通過(guò)設(shè)置一個(gè)漂亮的<name> config選項(xiàng)來(lái)定義其他格式format:
,如下所述(參見(jiàn)git-config [1])。以下是內(nèi)置格式的詳細(xì)信息:
oneline
<sha1> <title line>
這被設(shè)計(jì)得盡可能緊湊。
short
commit <sha1> Author: <author>
<title line>
medium
commit <sha1> Author: <author> Date: <author date>
<title line>
<full commit message>
full
commit <sha1> Author: <author> Commit: <committer>
<title line>
<full commit message>
fuller
commit <sha1> Author: <author> AuthorDate: <author date> Commit: <committer> CommitDate: <committer date>
<title line>
<full commit message>
email
From <sha1> <date> From: <author> Date: <author date> Subject: PATCH <title line>
<full commit message>
raw
的raw
格式示出了整個(gè)提交完全一樣存儲(chǔ)在 commit 對(duì)象。值得注意的是,不管是否使用--abbrev 或 --no-abbrev,SHA-1 都會(huì)全部顯示,并且parents
信息顯示的是真正的父提交,而不考慮移植或歷史簡(jiǎn)化。請(qǐng)注意,這種格式會(huì)影響提交顯示的方式,但不會(huì)影響比較顯示的方式git log --raw
。要以原始差異格式獲取完整對(duì)象名稱,請(qǐng)使用--no-abbrev
。
format:<string>
該format:<string>
格式允許您指定要顯示的信息。它的工作原理與 printf 格式有點(diǎn)相似,但有一個(gè)值得注意的例外,那就是用換行符%n
代替\n
。例如,format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"
會(huì)顯示這樣的內(nèi)容:fe6e0ee 的作者是 Junio C Hamano,23小時(shí)前標(biāo)題是>> t4119:測(cè)試 autocomputing -p <n>用于傳統(tǒng)差異輸入。<<
占位符是:
- `%H`: commit hash
- `%h`: abbreviated commit hash
- `%T`: tree hash
- `%t`: abbreviated tree hash
- `%P`: parent hashes
- `%p`: abbreviated parent hashes
- `%an`: author name
- `%aN`: author name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%ae`: author email
- `%aE`: author email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%ad`: author date (format respects --date= option)
- `%aD`: author date, RFC2822 style
- `%ar`: author date, relative
- `%at`: author date, UNIX timestamp
- `%ai`: author date, ISO 8601-like format
- `%aI`: author date, strict ISO 8601 format
- `%cn`: committer name
- `%cN`: committer name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%ce`: committer email
- `%cE`: committer email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%cd`: committer date (format respects --date= option)
- `%cD`: committer date, RFC2822 style
- `%cr`: committer date, relative
- `%ct`: committer date, UNIX timestamp
- `%ci`: committer date, ISO 8601-like format
- `%cI`: committer date, strict ISO 8601 format
- `%d`: ref names, like the --decorate option of [git-log[1]](git-log)
- `%D`: ref names without the " (", ")" wrapping.
- `%e`: encoding
- `%s`: subject
- `%f`: sanitized subject line, suitable for a filename
- `%b`: body
- `%B`: raw body (unwrapped subject and body)
- `%GG`: raw verification message from GPG for a signed commit
- `%G?`: show "G" for a good (valid) signature, "B" for a bad signature, "U" for a good signature with unknown validity, "X" for a good signature that has expired, "Y" for a good signature made by an expired key, "R" for a good signature made by a revoked key, "E" if the signature cannot be checked (e.g. missing key) and "N" for no signature
- `%GS`: show the name of the signer for a signed commit
- `%GK`: show the key used to sign a signed commit
- `%gD`: reflog selector, e.g., `refs/stash@{1}` or `refs/stash@{2 minutes ago`}; the format follows the rules described for the `-g` option. The portion before the `@` is the refname as given on the command line (so `git log -g refs/heads/master` would yield `refs/heads/master@{0}`).
- `%gd`: shortened reflog selector; same as `%gD`, but the refname portion is shortened for human readability (so `refs/heads/master` becomes just `master`).
- `%gn`: reflog identity name
- `%gN`: reflog identity name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%ge`: reflog identity email
- `%gE`: reflog identity email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%gs`: reflog subject
- `%Cred`: switch color to red
- `%Cgreen`: switch color to green
- `%Cblue`: switch color to blue
- `%Creset`: reset color
- `%C(…)`: color specification, as described under Values in the "CONFIGURATION FILE" section of [git-config[1]](git-config). By default, colors are shown only when enabled for log output (by `color.diff`, `color.ui`, or `--color`, and respecting the `auto` settings of the former if we are going to a terminal). `%C(auto,...)` is accepted as a historical synonym for the default (e.g., `%C(auto,red)`). Specifying `%C(always,...) will show the colors even when color is not otherwise enabled (though consider just using `--color=always` to enable color for the whole output, including this format and anything else git might color). `auto` alone (i.e. `%C(auto)`) will turn on auto coloring on the next placeholders until the color is switched again.
- `%m`: left (`<`), right (`>`) or boundary (`-`) mark
- `%n`: newline
- `%%`: a raw `%`
- `%x00`: print a byte from a hex code
- `%w([<w>[,<i1>[,<i2>]]])`: switch line wrapping, like the -w option of [git-shortlog[1]](git-shortlog).
- `%<(<N>[,trunc|ltrunc|mtrunc])`: make the next placeholder take at least N columns, padding spaces on the right if necessary. Optionally truncate at the beginning (ltrunc), the middle (mtrunc) or the end (trunc) if the output is longer than N columns. Note that truncating only works correctly with N >= 2.
- `%<|(<N>)`: make the next placeholder take at least until Nth columns, padding spaces on the right if necessary
- `%>(<N>)`, `%>|(<N>)`: similar to `%<(<N>)`, `%<|(<N>)` respectively, but padding spaces on the left
- `%>>(<N>)`, `%>>|(<N>)`: similar to `%>(<N>)`, `%>|(<N>)` respectively, except that if the next placeholder takes more spaces than given and there are spaces on its left, use those spaces
- `%><(<N>)`, `%><|(<N>)`: similar to `% <(<N>)`, `%<|(<N>)` respectively, but padding both sides (i.e. the text is centered)
- %(trailers): display the trailers of the body as interpreted by [git-interpret-trailers[1]](git-interpret-trailers)
注意 | 一些占位符可能取決于給修訂遍歷引擎的其他選項(xiàng)。例如,%g * reflog選項(xiàng)將插入一個(gè)空字符串,除非我們正在遍歷reflog條目(例如,通過(guò)git log -g)。如果未在命令行中提供--decorate,則%d和%D占位符將使用“短”修飾格式。 |
---|
如果+
在%
占位符之后添加(加號(hào)),當(dāng)且僅當(dāng)占位符展開(kāi)為非空字符串時(shí),才在擴(kuò)展之前插入換行符。
如果-
在%
占位符之后添加(減號(hào)),則當(dāng)且僅當(dāng)占位符展開(kāi)為空字符串時(shí),才會(huì)刪除緊接擴(kuò)展之前的所有連續(xù)換行。
如果在%
占位符之后添加(空格),當(dāng)且僅當(dāng)占位符展開(kāi)為非空字符串時(shí),才在擴(kuò)展之前插入空格。
tformat:
該tformat:
格式的操作完全相同format:
,不同之處在于它提供了“終結(jié)者”的語(yǔ)義,而不是“分隔符”的語(yǔ)義。換句話說(shuō),每個(gè)提交都附加了消息結(jié)束符(通常是一個(gè)換行符),而不是放置在條目之間的分隔符。這意味著單行格式的最終條目將以新的行正確終止,就像“在線”格式一樣。例如:$ git log -2 --pretty = format:%h 4da45bef \ | perl -pe'$ _。=“ - NO NEWLINE \ n”除非/ \ n /'4da45be 7134973 - 否NEWLINE $ git log -2 --pretty = tformat:%h 4da45bef \ | perl -pe'$ _。=“ - NO NEWLINE \ n”除非/ \ n /'4da45be 7134973
另外,任何含有%
它的無(wú)法識(shí)別的字符串都會(huì)被解釋為tformat:
在它之前。例如,這兩個(gè)是等價(jià)的:
$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef