亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

Name

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。

選項(xiàng)

提交限制

除了指定應(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/headsrefs/tagsrefs/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..commit2commit1...commit2符號(hào)不能使用)。

憑借--pretty比其他格式oneline(原因很明顯),這將導(dǎo)致輸出有從引用日志信息采取兩個(gè)額外的線路。輸出中的reflog指示符可能會(huì)顯示為ref@{Nth}(其中Nth是 reflog 中的反向按時(shí)間順序的索引)或者ref@{timestamp}(具有該條目的時(shí)間戳),具體取決于以下幾條規(guī)則:

  1. 如果起始點(diǎn)被指定為ref@{Nth},則顯示索引格式。

  2. 如果起始點(diǎn)被指定為ref@{now},則顯示時(shí)間戳記格式。

  3. 如果兩者都未使用,但--date已在命令行中提供,請(qǐng)按照要求的格式顯示時(shí)間戳--date。

  4. 否則,顯示索引格式。

  • 在此之下--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)展。

歷史簡(jiǎ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..commit2commit2 ^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)自ND來(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添加sideP,并且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ā)生了CN,和X,YQ

除上述設(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è)提交CC'最終歷史記錄中的替換:

  • 設(shè)置C'C。

  • 替換每個(gè)家長(zhǎng)PC'其簡(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é)果將是所有提交,除了AB(與D本身,當(dāng)然)。

但是,當(dāng)我們想要查明哪些提交M受到引入D并需要修復(fù)的bug的影響時(shí),我們可能只想查看其D..M實(shí)際后代的子集D,即排除CK。這正是--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。

對(duì)象遍歷

這些選項(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,shortmedium,full,fulleremail,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,這是缺省值,fullfuller)。

--show-signature

通過(guò)簽名傳遞gpg --verify并顯示輸出來(lái)檢查簽名提交對(duì)象的有效性。

--relative-date

--date=relative的同義詞。

--date=<format>

僅對(duì)以人可讀格式顯示的日期生效,例如在使用時(shí)--pretty。log.dateconfig變量為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ì)得盡可能緊湊。

  • shortcommit <sha1> Author: <author>

<title line>

  • mediumcommit <sha1> Author: <author> Date:   <author date>

<title line>

<full commit message>

  • fullcommit <sha1> Author: <author> Commit: <committer>

<title line>

<full commit message>

  • fullercommit <sha1> Author:     <author> AuthorDate: <author date> Commit:     <committer> CommitDate: <committer date>

<title line>

<full commit message>

  • emailFrom <sha1> <date> From: <author> Date: <author date> Subject: PATCH <title line>

<full commit message>

  • rawraw格式示出了整個(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 &grave;--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

Previous article: Next article: