<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # git-log > 原文: [https://git-scm.com/docs/git-log](https://git-scm.com/docs/git-log) ## 名稱 git-log - 顯示提交日志 ## 概要 ``` git log [<options>] [<revision range>] [[--] <path>…?] ``` ## 描述 顯示提交日志。 該命令采用適用于`git rev-list`命令的選項來控制顯示的內容和方式,以及適用于`git diff-*`命令的選項,以控制每個提交引入的更改的顯示方式。 ## OPTIONS ``` --follow ``` 繼續列出重命名以外的文件歷史記錄(僅適用于單個文件)。 ``` --no-decorate ``` ``` --decorate[=short|full|auto|no] ``` 打印出所有提交的引用名稱。如果指定_短_,則引用名稱前綴 _refs / heads /_ , _refs / tags /_ 和 _refs / remotes /_ 將不會打印。如果指定了 _full_ ,將打印完整的引用名稱(包括前綴)。如果指定了 _auto_ ,那么如果輸出到達終端,則ref名稱顯示為 _short_ ,否則不顯示ref名稱。默認選項為_短_。 ``` --decorate-refs=<pattern> ``` ``` --decorate-refs-exclude=<pattern> ``` 如果沒有給出`--decorate-refs`,假裝好像所有參考都被包括在內。對于每個候選人,如果它與`--decorate-refs-exclude`給出的任何模式匹配或者與`--decorate-refs`給出的任何模式都不匹配,請不要將其用于裝飾。 ``` --source ``` 打印出在每個提交到達的命令行上給出的引用名稱。 ``` --use-mailmap ``` 使用mailmap文件將作者和提交者名稱以及電子郵件地址映射到規范的真實姓名和電子郵件地址。見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 。 ``` --full-diff ``` 如果沒有此標志,`git log -p &lt;path&gt;...`將顯示觸摸指定路徑的提交,并顯示相同指定路徑的差異。這樣,就會顯示完全差異,以便接觸指定的路徑。這意味著“&lt; path&gt; ...”僅限制提交,并不限制這些提交的差異。 請注意,這會影響所有基于差異的輸出類型,例如:那些由`--stat`等產生的 ``` --log-size ``` 在每次提交的輸出中包含“日志大小&lt; number&gt;”行,其中&lt; number&gt;是以字節為單位的提交消息的長度。旨在通過允許它們提前分配空間來加速從`git log`輸出讀取日志消息的工具。 ``` -L <start>,<end>:<file> ``` ``` -L :<funcname>:<file> ``` 跟蹤“&lt; start&gt;,&lt; end&gt;”給出的行范圍的演變(或&lt; file&gt;)中的(或函數名稱regex&lt; funcname&gt;)。你可能不會給任何pathpec限制器。目前這僅限于從單個修訂開始的步行,即,您可能只提供零個或一個正修訂參數。您可以多次指定此選項。 &lt;開始&gt;和&lt; end&gt;可以采取以下形式之一: * 數 如果&lt; start&gt;或者&lt; end&gt;是一個數字,它指定一個絕對行號(行數從1開始)。 * /正則表達式/ 此表單將使用與給定POSIX正則表達式匹配的第一行。如果&lt; start&gt;是一個正則表達式,它將從前一個`-L`范圍的末尾搜索,如果有的話,否則從文件的開頭搜索。如果&lt; start&gt;是“^ / regex /”,它將從文件的開頭搜索。如果&lt; end&gt;是一個正則表達式,它將從&lt; start&gt;給出的行開始搜索。 * + offset或-offset 這僅適用于&lt; end&gt;并將在&lt; start&gt;給出的行之前或之后指定行數。 如果給出“:&lt; funcname&gt;”代替&lt; start&gt;和&lt; end&gt;,它是一個正則表達式,表示從匹配&lt; funcname&gt;的第一個funcname行到下一個funcname行的范圍。 “:&lt; funcname&gt;”從上一個`-L`范圍的末尾搜索(如果有的話),否則從文件的開頭搜索。 “^:&lt; funcname&gt;”從文件的開頭搜索。 ``` <revision range> ``` 僅顯示指定修訂范圍內的提交。當沒有&lt;修訂范圍&gt;如果指定,則默認為`HEAD`(即導致當前提交的整個歷史記錄)。 `origin..HEAD`指定從當前提交可以訪問的所有提交(即`HEAD`),但不是`origin`。有關拼寫&lt; revision range&gt;的完整列表,請參閱 [gitrevisions [7]](https://git-scm.com/docs/gitrevisions) 的_指定范圍_部分。 ``` [--] <path>…? ``` 僅顯示足以解釋與指定路徑匹配的文件的提交。有關詳細信息和其他簡化模式,請參見下面的_歷史簡化_。 當出現混淆時,路徑可能需要以`--`作為前綴,以將它們與選項或修訂范圍分開。 ### 提交限制 除了使用說明書中解釋的特殊符號指定應列出的提交范圍之外,還可以應用其他提交限制。 除非另有說明,否則使用更多選項通常會進一步限制輸出(例如,`--since=&lt;date1&gt;`限制提交比`&lt;date1&gt;`更新,并將其與`--grep=&lt;pattern&gt;`一起使用進一步限制其日志消息具有與`&lt;pattern&gt;`匹配的行的提交)。 請注意,這些是在提交排序和格式化選項之前應用的,例如`--reverse`。 ``` -<number> ``` ``` -n <number> ``` ``` --max-count=<number> ``` 限制要輸出的提交數量。 ``` --skip=<number> ``` 在開始顯示提交輸出之前,跳過_編號_提交。 ``` --since=<date> ``` ``` --after=<date> ``` 顯示比特定日期更新的提交。 ``` --until=<date> ``` ``` --before=<date> ``` 顯示超過特定日期的提交。 ``` --author=<pattern> ``` ``` --committer=<pattern> ``` 將提交輸出限制為具有與指定模式(正則表達式)匹配的作者/提交者標題行的輸出。對于多個`--author=&lt;pattern&gt;`,選擇作者與任何給定模式匹配的提交(類似于多個`--committer=&lt;pattern&gt;`)。 ``` --grep-reflog=<pattern> ``` 將提交輸出限制為具有與指定模式(正則表達式)匹配的reflog條目的輸出。如果有多個`--grep-reflog`,則選擇其reflog消息與任何給定模式匹配的提交。除非正在使用`--walk-reflogs`,否則使用此選項是錯誤的。 ``` --grep=<pattern> ``` 將提交輸出限制為具有與指定模式(正則表達式)匹配的日志消息的輸出。如果有多個`--grep=&lt;pattern&gt;`,則會選擇其消息與任何給定模式匹配的提交(但請參見`--all-match`)。 當`--show-notes`生效時,來自注釋的消息將被匹配,就像它是日志消息的一部分一樣。 ``` --all-match ``` 將提交輸出限制為匹配所有給定`--grep`的輸出,而不是匹配至少一個的輸出。 ``` --invert-grep ``` 將提交輸出限制為具有與`--grep=&lt;pattern&gt;`指定的模式不匹配的日志消息的輸出。 ``` -i ``` ``` --regexp-ignore-case ``` 匹配正則表達式限制模式而不考慮字母大小寫。 ``` --basic-regexp ``` 將限制模式視為基本正則表達式;這是默認值。 ``` -E ``` ``` --extended-regexp ``` 考慮限制模式是擴展正則表達式而不是默認的基本正則表達式。 ``` -F ``` ``` --fixed-strings ``` 將限制模式視為固定字符串(不要將模式解釋為正則表達式)。 ``` -P ``` ``` --perl-regexp ``` 將限制模式視為與Perl兼容的正則表達式。 對這些類型的正則表達式的支持是可選的編譯時依賴性。如果Git沒有編譯并支持它們,那么提供此選項將導致它死亡。 ``` --remove-empty ``` 當給定路徑從樹中消失時停止。 ``` --merges ``` 僅打印合并提交。這與`--min-parents=2`完全相同。 ``` --no-merges ``` 不要打印具有多個父級的提交。這與`--max-parents=1`完全相同。 ``` --min-parents=<number> ``` ``` --max-parents=<number> ``` ``` --no-min-parents ``` ``` --no-max-parents ``` 僅顯示至少(或最多)許多父提交的提交。特別是,`--max-parents=1`與`--no-merges`相同,`--min-parents=2`與`--merges`相同。 `--max-parents=0`給出所有root提交和`--min-parents=3`所有章魚合并。 `--no-min-parents`和`--no-max-parents`再次重置這些限制(無限制)。等效形式是`--min-parents=0`(任何提交具有0或更多父母)和`--max-parents=-1`(負數表示無上限)。 ``` --first-parent ``` 在看到合并提交時,僅遵循第一個父提交。在查看特定主題分支的演變時,此選項可以提供更好的概述,因為合并到主題分支往往只是關于不時調整到更新的上游,并且此選項允許您忽略引入的單個提交通過這樣的合并你的歷史。不能與--bisect結合使用。 ``` --not ``` 反轉所有后續修訂說明符的 _^_ 前綴(或缺少)的含義,直到下一個`--not`。 ``` --all ``` 假設`refs/`中的所有引用與`HEAD`一起在命令行中列為_&lt; commit&gt;_ 。 ``` --branches[=<pattern>] ``` 假設`refs/heads`中的所有引用都在命令行中列為_&lt; commit&gt;_ 。如果_&lt; pattern&gt;_ 給出,將分支限制為匹配給定shell glob的分支。如果模式缺乏_?最后暗示_, _*_ 或 _[_, _/ *_ 。 ``` --tags[=<pattern>] ``` 假設`refs/tags`中的所有引用都在命令行中列為_&lt; commit&gt;_ 。如果_&lt; pattern&gt;給出了_,將標簽限制為與給定shell glob匹配的標簽。如果模式缺乏_?最后暗示_, _*_ 或 _[_, _/ *_ 。 ``` --remotes[=<pattern>] ``` 假設`refs/remotes`中的所有引用都在命令行中列為_&lt; commit&gt;_ 。如果_&lt; pattern&gt;給出了_,將遠程跟蹤分支限制為與給定shell glob匹配的分支。如果模式缺乏_?最后暗示_, _*_ 或 _[_, _/ *_ 。 ``` --glob=<glob-pattern> ``` 假設所有的refs匹配shell glob _&lt; glob-pattern&gt;_ 在命令行中列為_&lt; commit&gt;_ 。領先的 _refs /_ 會在缺失時自動添加。如果模式缺乏_?最后暗示_, _*_ 或 _[_, _/ *_ 。 ``` --exclude=<glob-pattern> ``` 不包括引用匹配_&lt; glob-pattern&gt;_ 否則會考慮下一個`--all`,`--branches`,`--tags`,`--remotes`或`--glob`。重復此選項會累積排除模式,直至下一個`--all`,`--branches`,`--tags`,`--remotes`或`--glob`選項(其他選項或參數不會清除累積模式)。 當應用于`--branches`,`--tags`或`--remotes`時,給出的模式不應以`refs/heads`,`refs/tags`或`refs/remotes`開始,并且當應用于`--glob`時,它們必須以`refs/`開頭]或`--all`。如果打算使用尾隨 _/ *_ ,則必須明確給出。 ``` --reflog ``` 假設reflog所提到的所有對象都在命令行中列為`&lt;commit&gt;`。 ``` --single-worktree ``` 默認情況下,當有多個工作樹時,將通過以下選項檢查所有工作樹(參見 [git-worktree [1]](https://git-scm.com/docs/git-worktree) ):`--all`,`--reflog`和`--indexed-objects`。此選項強制它們僅檢查當前工作樹。 ``` --ignore-missing ``` 在輸入中看到無效的對象名稱時,假裝沒有給出錯誤的輸入。 ``` --bisect ``` 假設好像已經列出了錯誤的二分法`refs/bisect/bad`并且好像它后面跟著`--not`并且良好的二分法在命令行上引用了`refs/bisect/good-*`。不能與--first-parent結合使用。 ``` --stdin ``` 除了_&lt; commit&gt;在命令行中列出_,從標準輸入中讀取它們。如果看到`--`分隔符,請停止讀取提交并開始讀取路徑以限制結果。 ``` --cherry-mark ``` 與`--cherry-pick`(見下文)相同,但標記等效提交與`=`而不是省略它們,而與`+`不等價。 ``` --cherry-pick ``` 當提交集受限于對稱差異時,省略任何引用與“另一方”上的另一個提交相同的更改的提交。 例如,如果您有兩個分支,`A`和`B`,通常只在一側列出所有提交的方法是使用`--left-right`(請參閱下面`--left-right`選項說明中的示例) 。但是,它顯示了從另一個分支中挑選出來的提交(例如,“b上的第3個”可以從分支A中挑選出來)。使用此選項,將從輸出中排除此類提交對。 ``` --left-only ``` ``` --right-only ``` 列表僅在對稱差異的相應側提交,即僅在那些將被標記為`&lt;`的那些。 `&gt;` `--left-right`。 例如,`--cherry-pick --right-only A...B`省略了來自`B`的提交,這些提交位于`A`中,或者補丁等效于`A`中的提交。換句話說,這列出了`git cherry A B`的`+`提交。更確切地說,`--cherry-pick --right-only --no-merges`給出了確切的列表。 ``` --cherry ``` `--right-only --cherry-mark --no-merges`的同義詞;有用的是將輸出限制在我們這一側的提交中,并用`git log --cherry upstream...mybranch`標記已應用于分叉歷史記錄另一側的輸出,類似于`git cherry upstream mybranch`。 ``` -g ``` ``` --walk-reflogs ``` 而不是走提交祖先鏈,將reflog條目從最新的條目轉到較舊的條目。使用此選項時,您無法指定要排除的提交(即 _^ commit_ , _commit1..commit2_ , _commit1 ... commit2_ 表示法不能用過的)。 使用`oneline`以外的`--pretty`格式(出于顯而易見的原因),這會導致輸出從reflog中獲取兩行額外的信息。輸出中的reflog指示符可能顯示為`ref@{Nth}`(其中`Nth`是reflog中的反向時間順序索引)或`ref@{timestamp}`(帶有該條目的時間戳),具體取決于以下幾條規則: 1. 如果起始點指定為`ref@{Nth}`,則顯示索引格式。 2. 如果起始點指定為`ref@{now}`,則顯示時間戳格式。 3. 如果兩者均未使用,但在命令行中給出了`--date`,則以`--date`請求的格式顯示時間戳。 4. 否則,顯示索引格式。 在`--pretty=oneline`下,提交消息在同一行上以此信息為前綴。此選項不能與`--reverse`組合使用。另見 [git-reflog [1]](https://git-scm.com/docs/git-reflog) 。 ``` --merge ``` 合并失敗后,show refs觸摸有沖突的文件,并且在所有頭上都不存在要合并的文件。 ``` --boundary ``` 輸出排除邊界提交。邊界提交以`-`為前綴。 ### 歷史簡化 有時您只對歷史記錄的某些部分感興趣,例如修改特定&lt; path&gt;的提交。但_歷史簡化_有兩個部分,一部分是選擇提交,另一部分是如何做,因為有各種策略來簡化歷史。 以下選項選擇要顯示的提交: ``` <paths> ``` 提交修改給定的&lt;路徑&gt;被選中。 ``` --simplify-by-decoration ``` 選擇某些分支或標記引用的提交。 請注意,可以顯示額外的提交以提供有意義的歷史記錄。 以下選項會影響簡化的執行方式: ``` Default mode ``` 將歷史簡化為最簡單的歷史,解釋樹的最終狀態。最簡單的,因為如果最終結果相同(即合并具有相同內容的分支),它會修剪一些側分支 ``` --full-history ``` 與默認模式相同,但不修剪某些歷史記錄。 ``` --dense ``` 僅顯示選定的提交,并顯示一些具有有意義的歷史記錄。 ``` --sparse ``` 顯示簡化歷史記錄中的所有提交。 ``` --simplify-merges ``` `--full-history`的附加選項,用于從生成的歷史記錄中刪除一些不必要的合并,因為沒有選定的提交有助于此合并。 ``` --ancestry-path ``` 當給出一系列要顯示的提交時(例如 _commit1..commit2_ 或 _commit2 ^ commit1_ ),只顯示直接存在于 _commit1_ 之間的祖先鏈上的提交]和 _commit2_ ,即提交既是 _commit1_ 的后代,又是 _commit2_ 的祖先。 下面是更詳細的解釋。 假設您將`foo`指定為&lt; paths&gt;。我們將調用修改`foo`!TREESAME的提交,以及其余的TREESAME。 (在`foo`的差異濾波中,它們分別看起來不同且相等。) 在下文中,我們將始終參考相同的示例歷史記錄來說明簡化設置之間的差異。我們假設您正在過濾此提交圖中的文件`foo`: ``` .-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X ``` 歷史A --- Q的水平線被視為每次合并的第一個父級。提交是: * `I`是初始提交,其中`foo`存在內容“asdf”,文件`quux`存在,內容為“quux”。初始提交與空樹進行比較,因此`I`是!TREESAME。 * 在`A`中,`foo`僅包含“foo”。 * `B`包含與`A`相同的更改。它的合并`M`是微不足道的,因此對所有父母都是TREESAME。 * `C`不會更改`foo`,但是它的合并`N`會將其更改為“foobar”,因此它不是任何父級的TREESAME。 * `D`將`foo`設置為“baz”。它的合并`O`將`N`和`D`的字符串組合成“foobarbaz”;即,它不是任何父母的TREESAME。 * `E`將`quux`更改為“xyzzy”,其合并`P`將字符串組合為“quux xyzzy”。 `P`是TREESAME到`O`,但不是`E`。 * `X`是一個獨立的根提交,它添加了一個新文件`side`,`Y`修改了它。 `Y`是TREESAME到`X`。它的合并`Q`將`side`添加到`P`,`Q`將TREESAME添加到`P`,但不添加到`Y`。 `rev-list`根據是否使用`--full-history`和/或父改寫(通過`--parents`或`--children`)來回溯歷史記錄,包括或排除提交。可以使用以下設置。 ``` Default mode ``` 如果對任何父母不是TREESAME,則包含提交(盡管可以更改,請參閱下面的`--sparse`)。如果提交是合并,并且它是一個父級的TREESAME,則只關注該父級。 (即使有幾個TREESAME父母,也只能跟隨他們中的一個。)否則,請跟隨所有父母。 這導致: ``` .-A---N---O / / / I---------D ``` 請注意,僅遵循TREESAME父級的規則(如果有的話)將完全從考慮中刪除`B`。 `C`被認為是通過`N`,但是是TREESAME。 Root提交與空樹進行比較,因此`I`是!TREESAME。 父/子關系僅在`--parents`中可見,但這不會影響在默認模式下選擇的提交,因此我們顯示了父行。 ``` --full-history without parent rewriting ``` 此模式與默認值在一點上不同:始終跟隨合并的所有父項,即使它是其中一個的TREESAME。即使合并的多個方面包含了包含的提交,這并不意味著合并本身就是!在這個例子中,我們得到了 ``` I A B N D O P Q ``` `M`被排除在外,因為對父母雙方都是TREESAME。 `E`,`C`和`B`都走了,但只有`B`是!TREESAME,所以沒有出現。 請注意,如果沒有父改寫,就不可能談論提交之間的父/子關系,因此我們將它們顯示為斷開連接。 ``` --full-history with parent rewriting ``` 只有普通提交才包括在內!TREESAME(雖然可以更改,但請參見下面的`--sparse`)。 合并始終包括在內。但是,它們的父列表會被重寫:沿著每個父項刪除不包含在其中的提交。這導致了 ``` .-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------' ``` 與`--full-history`比較而不重寫上述內容。請注意,`E`被刪除,因為它是TREESAME,但是P的父列表被重寫為包含`E`的父`I`。 `C`和`N`,`X`,`Y`和`Q`也發生了同樣的情況。 除上述設置外,您還可以更改TREESAME是否影響包含: ``` --dense ``` 如果他們不是任何父母的TREESAME,則包括走路的提交。 ``` --sparse ``` 包括所有步行的提交。 請注意,如果沒有`--full-history`,這仍然可以簡化合并:如果其中一個父項是TREESAME,我們只遵循那個,所以合并的其他方面永遠不會走。 ``` --simplify-merges ``` 首先,以與父改寫的`--full-history`相同的方式構建歷史圖(參見上文)。 然后根據以下規則將每個提交`C`簡化為最終歷史記錄中的替換`C'`: * 將`C'`設置為`C`。 * 將`C'`的每個父`P`替換為其簡化`P'`。在這個過程中,刪除作為其他父母或祖先的祖先的父母將TREESAME提交到空樹,并刪除重復項,但要注意永遠不要刪除我們所有父母的TREESAME。 * 如果在此父級重寫之后,`C'`是根或合并提交(具有零或&gt; 1父級),邊界提交或!TREESAME,它仍然存在。否則,它將替換為其唯一的父級。 通過與`--full-history`與父重寫進行比較,可以最好地顯示出這種效果。這個例子變成了: ``` .-A---M---N---O / / / I B D \ / / `---------' ``` 注意`N`,`P`和`Q`與`--full-history`的主要差異: * `N`的父列表刪除了`I`,因為它是另一個父`M`的祖先。仍然,`N`仍然是因為它是!TREESAME。 * `P`的父列表同樣刪除了`I`。 `P`然后被完全刪除,因為它有一個父母并且是TREESAME。 * `Q`的父列表將`Y`簡化為`X`。然后刪除`X`,因為它是TREESAME根。 `Q`然后被完全刪除,因為它有一個父母并且是TREESAME。 最后,還有第五種簡化模式: ``` --ancestry-path ``` 將顯示的提交限制為直接在給定提交范圍中的“from”和“to”提交之間的祖先鏈上的提交。即只顯示“to”提交的祖先和“from”提交的后代的提交。 作為示例用例,請考慮以下提交歷史記錄: ``` D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M ``` 常規 _D..M_ 計算作為`M`的祖先的提交集,但不包括作為`D`的祖先的提交。這對于從`D`以來導致`M`的歷史發生了什么是有用的,因為“`D`中沒有`M`具有什么`M`”。這個例子中的結果將是所有提交,除了`A`和`B`(當然還有`D`本身)。 當我們想知道`M`中的提交被`D`引入的bug污染并需要修復時,我們可能只想查看實際上 _D..M_ 的子集`D`的后代,即排除`C`和`K`。這正是`--ancestry-path`選項的作用。應用于 _D..M_ 范圍,它會導致: ``` E-------F \ \ G---H---I---J \ L--M ``` `--simplify-by-decoration`選項允許您通過省略未由標記引用的提交來僅查看歷史拓撲的大圖。如果(1)它們被標記引用,或(2)它們改變命令行上給出的路徑的內容,則提交被標記為!TREESAME(換句話說,保持在上述歷史簡化規則之后)。所有其他提交都標記為TREESAME(可以簡化)。 ### 提交訂購 默認情況下,提交以反向時間順序顯示。 ``` --date-order ``` 在顯示所有子項之前不顯示父項,但在提交時間戳順序中顯示提交。 ``` --author-date-order ``` 在顯示所有子項之前不顯示父項,但在作者時間戳順序中顯示提交。 ``` --topo-order ``` 在顯示所有子項之前不顯示父項,并避免在多行歷史記錄中顯示混合的提交。 例如,在這樣的提交歷史中: ``` ---1----2----4----7 \ \ 3----5----6----8--- ``` 其中數字表示提交時間戳的順序,`git rev-list`和`--date-order`的朋友按時間戳順序顯示提交:8 7 6 5 4 3 2 1。 使用`--topo-order`,他們將顯示8 6 5 3 7 4 2 1(或8 7 4 2 6 5 3 1);為了避免將兩個并行開發軌道的提交混合在一起,顯示一些較舊的提交在較新的提交之前。 ``` --reverse ``` 輸出要以相反順序顯示的提交(請參閱上面的“提交限制”部分)。不能與`--walk-reflogs`結合使用。 ### 對象遍歷 這些選項主要用于打包Git存儲庫。 ``` --no-walk[=(sorted|unsorted)] ``` 只顯示給定的提交,但不要遍歷他們的祖先。如果指定了范圍,則無效。如果給出了參數`unsorted`,則提交將按命令行中給出的順序顯示。否則(如果`sorted`或沒有給出參數),提交按提交時間以反向時間順序顯示。不能與`--graph`結合使用。 ``` --do-walk ``` 覆蓋之前的`--no-walk`。 ### 提交格式 ``` --pretty[=<format>] ``` ``` --format=<format> ``` 以給定格式打印提交日志的內容,其中_&lt; format&gt;_ 可以是 _oneline_ ,_短_,_培養基_,_全_,_更豐富_,_之一電子郵件_,_原始_,_格式:&lt; string&gt;_ 和 _tformat:&lt; string&gt;_ 。當_&lt; format&gt;_ 不屬于上述情況,并且其中包含_%占位符_,其行為就像 _--pretty = tformat:&lt; format&gt;_ 給出了。 有關每種格式的一些其他詳細信息,請參閱“PRETTY FORMATS”部分。當 _=&lt; format&gt;_ 部分省略,默認為 _medium_ 。 注意:您可以在存儲庫配置中指定默認的漂亮格式(請參閱 [git-config [1]](https://git-scm.com/docs/git-config) )。 ``` --abbrev-commit ``` 而不是顯示完整的40字節十六進制提交對象名稱,而只顯示部分前綴。可以使用“--abbrev =&lt; n&gt;”指定非默認位數(如果顯示,也會修改diff輸出)。 對于使用80列終端的人來說,這應該使“--pretty = oneline”更具可讀性。 ``` --no-abbrev-commit ``` 顯示完整的40字節十六進制提交對象名稱。這否定了`--abbrev-commit`以及暗示它的選項,例如“--oneline”。它還會覆蓋`log.abbrevCommit`變量。 ``` --oneline ``` 這是一起使用的“--pretty = oneline --abbrev-commit”的簡寫。 ``` --encoding=<encoding> ``` 提交對象在其編碼頭中記錄用于日志消息的編碼;此選項可用于告訴命令以用戶首選的編碼重新編碼提交日志消息。對于非管道命令,默認為UTF-8。請注意,如果一個對象聲稱在`X`中編碼并且我們在`X`中輸出,我們將逐字輸出該對象;這意味著原始提交中的無效序列可能會復制到輸出中。 ``` --expand-tabs=<n> ``` ``` --expand-tabs ``` ``` --no-expand-tabs ``` 執行選項卡擴展(將每個選項卡替換為足夠的空格以填充到日志消息中的_&lt; n&gt;_ 的倍數的下一個顯示列),然后在輸出中顯示它。 `--expand-tabs`是`--expand-tabs=8`的簡寫,`--no-expand-tabs`是`--expand-tabs=0`的簡寫,它會禁用制表符擴展。 默認情況下,選項卡以相當格式展開,將日志消息縮進4個空格(即 _medium_ ,默認情況下, _full_ 和 _fulller_ )。 ``` --notes[=<treeish>] ``` 在顯示提交日志消息時,顯示注釋提交的注釋(請參閱 [git-notes [1]](https://git-scm.com/docs/git-notes) )。當命令行中沒有給出`--pretty`,`--format`或`--oneline`選項時,這是`git log`,`git show`和`git whatchanged`命令的默認值。 默認情況下,顯示的注釋來自`core.notesRef`和`notes.displayRef`變量(或相應的環境覆蓋)中列出的注釋refs。有關詳細信息,請參閱 [git-config [1]](https://git-scm.com/docs/git-config) 。 使用可選的_&lt; treeish&gt;_ 參數,使用樹形查找要顯示的注釋。樹形可以在以`refs/notes/`開頭時指定完整的引用名稱;當它以`notes/`開始時,`refs/`和其他`refs/notes/`作為前綴以形成ref的全名。 可以組合多個--notes選項來控制顯示哪些音符。示例:“ - notes = foo”將僅顯示“refs / notes / foo”中的注釋; “--notes = foo --notes”將顯示“refs / notes / foo”和默認音符ref(s)中的兩個音符。 ``` --no-notes ``` 不要顯示筆記。這取消了上面的`--notes`選項,通過重置顯示注釋的注釋列表。選項按命令行中給出的順序進行解析,例如, “--notes --notes = foo --no-notes --notes = bar”只會顯示“refs / notes / bar”中的注釋。 ``` --show-notes[=<treeish>] ``` ``` --[no-]standard-notes ``` 不推薦使用這些選項。請使用上面的--notes / - no-notes選項。 ``` --show-signature ``` 通過將簽名傳遞給`gpg --verify`并顯示輸出來檢查已簽名的提交對象的有效性。 ``` --relative-date ``` `--date=relative`的同義詞。 ``` --date=<format> ``` 僅對以人類可讀格式顯示的日期生效,例如使用`--pretty`時。 `log.date` config變量為日志命令的`--date`選項設置默認值。默認情況下,日期顯示在原始時區(提交者或作者)中。如果`-local`附加到格式(例如,`iso-local`),則使用用戶的本地時區。 `--date=relative`顯示相對于當前時間的日期,例如“2小時前”。 `-local`選項對`--date=relative`無效。 `--date=local`是`--date=default-local`的別名。 `--date=iso`(或`--date=iso8601`)以類似ISO 8601的格式顯示時間戳。與嚴格的ISO 8601格式的區別在于: * 空格而不是`T`日期/時間分隔符 * 時區和時區之間的空間 * 時區的小時和分鐘之間沒有冒號 `--date=iso-strict`(或`--date=iso8601-strict`)以嚴格的ISO 8601格式顯示時間戳。 + `--date=rfc`(或`--date=rfc2822`)以RFC 2822格式顯示時間戳,通常在電子郵件中找到。 + `--date=short`僅以`YYYY-MM-DD`格式顯示日期,但不顯示時間。 + `--date=raw`顯示自紀元以來的秒數(1970-01-01 00:00:00 UTC),后跟一個空格,然后將時區顯示為與UTC的偏移量(`+`或`-`與四位數;前兩位是小時,后兩位是分鐘)。即,好像時間戳是用`strftime("%s %z")`格式化的。請注意,`-local`選項不會影響秒 - 自 - 紀元值(始終以UTC為單位),但會切換附帶的時區值。 + `--date=human`如果時區與當前時區不匹配則顯示時區,如果匹配則不顯示整個日期(即跳過“今年”日期的打印年份,但也跳過整個日期如果它是在過去幾天,我們可以說它是什么工作日)。對于較舊的日期,小時和分鐘也被省略。 + `--date=unix`將日期顯示為Unix紀元時間戳(自1970年以來的秒數)。與`--raw`一樣,它始終為UTC,因此`-local`無效。 + `--date=format:...`將格式`...`輸入系統`strftime`,%z和%Z除外,它們在內部處理。使用`--date=format:%c`以系統區域設置的首選格式顯示日期。有關格式占位符的完整列表,請參閱`strftime`手冊。使用`-local`時,正確的語法是`--date=format-local:...`。 + `--date=default`是默認格式,類似于`--date=rfc2822`,但有一些例外: * 星期幾之后沒有逗號 * 使用本地時區時,省略時區 ``` --parents ``` 同時打印提交的父級(以“提交父級”的形式)。也可以啟用父重寫,請參閱上面的_歷史簡化_。 ``` --children ``` 同時打印提交的子項(以“提交子項...”的形式)。也可以啟用父重寫,請參閱上面的_歷史簡化_。 ``` --left-right ``` 標記可以從中獲取提交的對稱差異的哪一側。左側的提示以`&lt;`為前綴,右側的提示以`&gt;`為前綴。如果與`--boundary`結合使用,則這些提交以`-`為前綴。 例如,如果您有此拓撲: ``` y---b---b branch B / \ / / . / / \ o---x---a---a branch A ``` 你會得到這樣的輸出: ``` $ 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 ``` 在輸出的左側繪制提交歷史的基于文本的圖形表示。這可能會導致在提交之間打印額外的行,以便正確繪制圖形歷史記錄。不能與`--no-walk`結合使用。 這使父進行重寫,參見上面的_歷史簡化_。 默認情況下,這意味著`--topo-order`選項,但也可以指定`--date-order`選項。 ``` --show-linear-break[=<barrier>] ``` 當不使用--graph時,所有歷史分支都被展平,這使得很難看出兩個連續的提交不屬于線性分支。在這種情況下,此選項會在它們之間設置障礙。如果指定了`&lt;barrier&gt;`,則顯示的是字符串而不是默認字符串。 ### 差異格式化 下面列出了控制diff輸出格式的選項。其中一些特定于 [git-rev-list [1]](https://git-scm.com/docs/git-rev-list) ,但是可以給出其他差異選項。有關更多選項,請參閱 [git-diff-files [1]](https://git-scm.com/docs/git-diff-files) 。 ``` -c ``` 使用此選項,合并提交的diff輸出同時顯示每個父項與合并結果的差異,而不是一次顯示父項和結果之間的成對差異。此外,它僅列出從所有父母修改的文件。 ``` --cc ``` 這個標志意味著`-c`選項并通過省略不感興趣的帥哥進一步壓縮補丁輸出,其中父母的內容只有兩個變體,合并結果選擇其中一個而不做修改。 ``` -m ``` 此標志使合并提交像常規提交一樣顯示完整差異;對于每個合并父項,將生成單獨的日志條目和差異。一個例外是,當給出`--first-parent`選項時,只顯示對第一個父項的差異;在這種情況下,輸出表示合并帶來的變化_進入當前分支的_。 ``` -r ``` 顯示遞歸差異。 ``` -t ``` 在diff輸出中顯示樹對象。這意味著`-r`。 ## 漂亮的格式 如果提交是合并,并且如果漂亮格式不是 _oneline_ ,_電子郵件_或 _raw_ ,則在_作者之前插入另一行:_行。該行以“Merge:”開頭,并且打印祖先提交的sha1,用空格分隔。請注意,如果您限制了對歷史記錄的查看,則列出的提交可能不一定是**直接**父提交的列表:例如,如果您只對與某個目錄或文件相關的更改感興趣。 有幾種內置格式,您可以通過設置漂亮的格式來定義其他格式。&lt; name&gt;將選項配置為另一種格式名稱或_格式:_字符串,如下所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。以下是內置格式的詳細信息: * _oneline_ ``` &lt;sha1&gt; &lt;title line&gt; ``` 這是為了盡可能緊湊。 * _短_ ``` commit &lt;sha1&gt; Author: &lt;author&gt; ``` ``` &lt;title line&gt; ``` * _中_ ``` commit &lt;sha1&gt; Author: &lt;author&gt; Date: &lt;author date&gt; ``` ``` &lt;title line&gt; ``` ``` &lt;full commit message&gt; ``` * _全_ ``` commit &lt;sha1&gt; Author: &lt;author&gt; Commit: &lt;committer&gt; ``` ``` &lt;title line&gt; ``` ``` &lt;full commit message&gt; ``` * _更豐富_ ``` commit &lt;sha1&gt; Author: &lt;author&gt; AuthorDate: &lt;author date&gt; Commit: &lt;committer&gt; CommitDate: &lt;committer date&gt; ``` ``` &lt;title line&gt; ``` ``` &lt;full commit message&gt; ``` * _電子郵件_ ``` From &lt;sha1&gt; &lt;date&gt; From: &lt;author&gt; Date: &lt;author date&gt; Subject: [PATCH] &lt;title line&gt; ``` ``` &lt;full commit message&gt; ``` * _原始_ _raw_ 格式顯示完整提交,與存儲在提交對象中完全相同。值得注意的是,無論是否使用--abbrev或--no-abbrev,SHA-1都會完整顯示,并且_父_信息顯示真正的父提交,而不考慮移植或歷史簡化。請注意,此格式會影響提交的顯示方式,但不會影響顯示差異的方式,例如用`git log --raw`。要以原始diff格式獲取完整對象名稱,請使用`--no-abbrev`。 * _格式:&lt; string&gt;_ _格式:&lt; string&gt;_ 格式允許您指定要顯示的信息。它的工作方式有點像printf格式,但有一個值得注意的例外,即你用_%n_ 而不是 _\ n_ 獲得換行符。 例如,_格式:“%h的作者是%an,%ar%n標題是&gt;&gt;%s&lt;&lt;%n”_將顯示如下內容: ``` The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was &gt;&gt;t4119: test autocomputing -p&lt;n&gt; for traditional diff input.&lt;&lt; ``` 占位符是: * _%H_ :提交哈希 * _%h_ :縮寫提交哈希 * _%T_ :樹形哈希 * _%t_ :縮寫樹哈希 * _%P_ :父哈希 * _%p_ :縮寫為父哈希值 * _%和_:作者姓名 * _%aN_ :作者姓名(尊重.mailmap,見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 或 [git-blame [1]](https://git-scm.com/docs/git-blame) ) * _%ae_ :作者電郵 * _%aE_ :作者電子郵件(尊重.mailmap,見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 或 [git-blame [1]](https://git-scm.com/docs/git-blame) ) * _%ad_ :作者日期(格式尊重 - 日期=選項) * _%aD_ :作者日期,RFC2822風格 * _%ar_ :作者日期,相對 * 的_%:作者日期,UNIX時間戳_ * _%ai_ :作者日期,ISO 8601樣格式 * _%aI_ :作者日期,嚴格的ISO 8601格式 * _%cn_ :提交者名稱 * _%cN_ :提交者名稱(尊重.mailmap,見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 或 [git-blame [1]](https://git-scm.com/docs/git-blame) ) * _%ce_ :提交者電子郵件 * _%cE_ :提交者電子郵件(尊重.mailmap,參見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 或 [git-blame [1]](https://git-scm.com/docs/git-blame) ) * _%cd_ :提交者日期(格式尊重 - 日期=選項) * _%cD_ :提交者日期,RFC2822樣式 * _%cr_ :提交者日期,相對 * _%ct_ :提交者日期,UNIX時間戳 * _%ci_ :提交者日期,類似ISO 8601的格式 * _%cI_ :提交者日期,嚴格的ISO 8601格式 * _%d_ :引用名稱,如 [git-log [1]](https://git-scm.com/docs/git-log) 的--decorate選項 * _%D_ :沒有“(”,“)”包裝的引用名稱。 * _%S_ :在達到提交的命令行上給出的引用名稱(如`git log --source`),僅適用于`git log` * _%e_ :編碼 * _%s_ :受試者 * _%f_ :已清理的主題行,適用于文件名 * _%b_ :身體 * _%B_ :生體(未包裹的主體和身體) * _%N_ :提交備注 * _%GG_ :來自GPG的簽名提交的原始驗證消息 * _%G?_ :顯示好的(有效)簽名“G”,壞簽名顯示“B”,有效期未知的好簽名顯示“U”,已過期的好簽名顯示“X”,“Y”代表由過期密鑰簽名的好簽名,“R”表示由撤銷密鑰簽名的好簽名,“E”表示簽名無法檢查(例如缺少密鑰),“N”表示沒有簽名 * _%GS_ :顯示簽名提交的簽名者姓名 * _%GK_ :顯示用于簽署簽名提交的密鑰 * _%GF ??_:顯示用于簽署簽名提交的密鑰的指紋 * _%GP_ :顯示主鍵的指紋,其子鍵用于簽名提交的簽名 * _%gD_ :reflog選擇器,例如`refs/stash@{1}`或`refs/stash@{2 minutes ago`};格式遵循`-g`選項描述的規則。 `@`之前的部分是命令行中給出的refname(因此`git log -g refs/heads/master`將產生`refs/heads/master@{0}`)。 * _%gd_ :縮短了reflog選擇器;與`%gD`相同,但refname部分縮短了人類的可讀性(因此`refs/heads/master`變為`master`)。 * _%gn_ :reflog身份名稱 * _%gN_ :reflog身份名稱(尊重.mailmap,見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 或 [git-blame [1]](https://git-scm.com/docs/git-blame) ) * _%ge_ :reflog身份電子郵件 * _%gE_ :reflog身份郵件(尊重.mailmap,見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 或 [git-blame [1]](https://git-scm.com/docs/git-blame) ) * _%gs_ :reflog主題 * _%Cred_ :將顏色切換為紅色 * _%Cgreen_ :將顏色切換為綠色 * _%Cblue_ :將顏色切換為藍色 * _%Creset_ :重置顏色 * _%C(...)_:顏色規格,如 [git-config [1]](https://git-scm.com/docs/git-config) 的“CONFIGURATION FILE”部分中的值所述。默認情況下,僅在啟用日志輸出時顯示顏色(通過`color.diff`,`color.ui`或`--color`,并且如果我們要去終端,則尊重前者的`auto`設置)。 `%C(auto,...)`被接受為默認的歷史同義詞(例如,`%C(auto,red)`)。即使沒有啟用顏色,指定`%C(always,...)`也會顯示顏色(盡管只考慮使用`--color=always`為整個輸出啟用顏色,包括這種格式和其他任何git可能顏色的顏色)。單獨`auto`(即`%C(auto)`)將打開下一個占位符的自動著色,直到再次切換顏色。 * _%m_ :左(`&lt;`),右(`&gt;`)或邊界(`-`)標記 * _%n_ :換行符 * _%%_ :原始_%_ * _%x00_ :從十六進制代碼打印一個字節 * _%w([&lt; w&gt; [,&lt; i1&gt; [,&lt; i2&gt;]]])_:切換行換行,類似 [git-shortlog [1]的-w選項](https://git-scm.com/docs/git-shortlog)。 * _%&lt;(&lt; N&gt; [,trunc | ltrunc | mtrunc])_:使下一個占位符至少取N列,如果需要,在右邊填充空格。如果輸出長于N列,則可以選擇在開頭(ltrunc),中間(mtrunc)或結尾(trunc)截斷。請注意,截斷僅適用于N&gt; = 2。 * _%&lt; |(&lt; N&gt;)_:使下一個占位符至少占用第N列,如果需要,在右邊填充空格 * _%&gt;(&lt; N&gt;)_,_%&gt; |(&lt; N&gt;)_:與_%相似,_%&lt; |(&lt; N&gt;)_,但左邊的填充空格_ * _%&gt;(&lt; N&gt;)_,_%&gt; |(&lt; N&gt;)_:類似于_%&gt;(&lt; N&gt;分別是_,_%&gt; |(&lt; N&gt;)_,除非下一個占位符占用的空間多于給定的空間并且左側有空格,請使用這些空格 * _%&gt;&lt;(&lt; N&gt;)_,_%&gt;&lt; |(&lt; N&gt;)_:類似于_%&lt;(&lt; N&gt; )_,_%&lt; |(&lt; N&gt;)_,但填充兩側(即文本居中) * %(預告片[:options]):顯示 [git-interpret-trailers [1]](https://git-scm.com/docs/git-interpret-trailers) 解釋的正文預告片。 `trailers`字符串后面可以跟冒號和零個或多個逗號分隔選項。如果給出了`only`選項,則省略拖車塊中的非拖車線。如果給出`unfold`選項,則表現得就像給出了interpre-trailer的`--unfold`選項一樣。例如,`%(trailers:only,unfold)`兩者都做。 | 注意 | 一些占位符可能依賴于修訂遍歷引擎的其他選項。例如,`%g*` reflog選項將插入一個空字符串,除非我們遍歷reflog條目(例如,通過`git log -g`)。如果命令行中尚未提供`--decorate`,`%d`和`%D`占位符將使用“短”裝飾格式。 | 如果在占位符的_%_之后添加`+`(加號),則在擴展之前插入換行符當且僅當占位符擴展為非空字符串時。 如果在占位符的_%_之后添加`-`(減號),則當且僅當占位符擴展為空字符串時,才會刪除緊接在擴展之前的所有連續換行符。 如果在占位符的_%_之后添加一個“空格”,則在擴展之前插入一個空格,當且僅當占位符擴展為非空字符串時。 * _tformat:_ _格式:_格式與_格式完全相同:_,除了它提供“終結符”語義而不是“分隔符”語義。換句話說,每個提交都附加了消息終止符(通常是換行符),而不是在條目之間放置的分隔符。這意味著單行格式的最終??輸入將使用新行正確終止,就像“oneline”格式一樣。例如: ``` $ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 -- NO NEWLINE $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 ``` 此外,其中包含`%`的任何無法識別的字符串都被解釋為它前面有`tformat:`。例如,這兩個是等價的: ``` $ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef ``` ## 常見的DIFF選項 ``` -p ``` ``` -u ``` ``` --patch ``` 生成補丁(請參閱生成補丁的部分)。 ``` -s ``` ``` --no-patch ``` 抑制差異輸出。對于`git show`等默認顯示補丁的命令,或取消`--patch`的效果很有用。 ``` -U<n> ``` ``` --unified=<n> ``` 用&lt; n&gt;生成差異。上下文而不是通常的三行。意味著`-p`。 ``` --raw ``` 對于每個提交,使用原始diff格式顯示更改摘要。請參閱 [git-diff [1]](https://git-scm.com/docs/git-diff) 的“RAW OUTPUT FORMAT”部分。這與以原始格式顯示日志本身不同,您可以使用`--format=raw`來實現。 ``` --patch-with-raw ``` `-p --raw`的同義詞。 ``` --indent-heuristic ``` 啟用改變差異塊邊界的啟發式以使補丁更易于閱讀。這是默認值。 ``` --no-indent-heuristic ``` 禁用縮進啟發式。 ``` --minimal ``` 花些額外的時間來確保產生盡可能小的差異。 ``` --patience ``` 使用“耐心差異”算法生成差異。 ``` --histogram ``` 使用“histogram diff”算法生成diff。 ``` --anchored=<text> ``` 使用“錨定差異”算法生成差異。 可以多次指定此選項。 如果源和目標中都存在一行,只存在一次,并以此文本開頭,則此算法會嘗試阻止它在輸出中顯示為刪除或添加。它在內部使用“耐心差異”算法。 ``` --diff-algorithm={patience|minimal|histogram|myers} ``` 選擇差異算法。變體如下: ``` default, myers ``` 基本的貪心差異算法。目前,這是默認值。 ``` minimal ``` 花些額外的時間來確保產生盡可能小的差異。 ``` patience ``` 生成補丁時使用“耐心差異”算法。 ``` histogram ``` 該算法將耐心算法擴展為“支持低發生的共同元素”。 例如,如果將`diff.algorithm`變量配置為非默認值并想要使用默認值,則必須使用`--diff-algorithm=default`選項。 ``` --stat[=<width>[,<name-width>[,<count>]]] ``` 生成diffstat。默認情況下,文件名部分將使用必要的空間,圖形部分的其余部分將使用。最大寬度默認為終端寬度,如果未連接到終端,則為80列,并且可以被`&lt;width&gt;`覆蓋。可以通過在逗號后面給出另一個寬度`&lt;name-width&gt;`來限制文件名部分的寬度。可以使用`--stat-graph-width=&lt;width&gt;`(影響生成統計圖的所有命令)或設置`diff.statGraphWidth=&lt;width&gt;`(不影響`git format-patch`)來限制圖形部分的寬度。通過給出第三個參數`&lt;count&gt;`,可以將輸出限制為第一個`&lt;count&gt;`行,如果有更多,則可以將`...`限制為`...`。 也可以使用`--stat-width=&lt;width&gt;`,`--stat-name-width=&lt;name-width&gt;`和`--stat-count=&lt;count&gt;`單獨設置這些參數。 ``` --compact-summary ``` 輸出擴展標題信息的精簡摘要,例如文件創建或刪除(“新”或“消失”,如果是符號鏈接,則可選“+ l”)和模式更改(“+ x”或“-x”用于添加或刪除diffstat中的可執行位)。信息放在文件名部分和圖形部分之間。意味著`--stat`。 ``` --numstat ``` 與`--stat`類似,但顯示十進制表示法中添加和刪除的行數以及沒有縮寫的路徑名,以使其更加機器友好。對于二進制文件,輸出兩個`-`而不是`0 0`。 ``` --shortstat ``` 僅輸出`--stat`格式的最后一行,其中包含已修改文件的總數,以及已添加和已刪除行的數量。 ``` --dirstat[=<param1,param2,…?>] ``` 輸出每個子目錄的相對更改量的分布。 `--dirstat`的行為可以通過以逗號分隔的參數列表傳遞來定制。默認值由`diff.dirstat`配置變量控制(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。可以使用以下參數: ``` changes ``` 通過計算已從源中刪除或添加到目標的行來計算dirstat數。這忽略了文件中純代碼移動的數量。換句話說,重新排列文件中的行不會像其他更改那樣計算。這是沒有給出參數時的默認行為。 ``` lines ``` 通過執行常規的基于行的差異分析來計算dirstat數字,并對移除/添加的行數進行求和。 (對于二進制文件,計算64字節塊,因為二進制文件沒有自然的線條概念)。這是比`changes`行為更昂貴的`--dirstat`行為,但它確實計算文件中重新排列的行與其他更改一樣多。結果輸出與您從其他`--*stat`選項獲得的輸出一致。 ``` files ``` 通過計算更改的文件數來計算dirstat數。在dirstat分析中,每個更改的文件都相同。這是計算上最便宜的`--dirstat`行為,因為它根本不需要查看文件內容。 ``` cumulative ``` 計算父目錄的子目錄中的更改。請注意,使用`cumulative`時,報告的百分比總和可能超過100%。可以使用`noncumulative`參數指定默認(非累積)行為。 ``` <limit> ``` 整數參數指定截止百分比(默認為3%)。貢獻低于此百分比變化的目錄不會顯示在輸出中。 示例:以下將計算已更改的文件,同時忽略少于已更改文件總量的10%的目錄,并在父目錄中累計子目錄計數:`--dirstat=files,10,cumulative`。 ``` --summary ``` 輸出擴展標題信息的精簡摘要,例如創建,重命名和模式更改。 ``` --patch-with-stat ``` `-p --stat`的同義詞。 ``` -z ``` 將提交與NUL分開,而不是使用新換行符。 此外,當給出`--raw`或`--numstat`時,不要使用路徑名并使用NUL作為輸出字段終止符。 如果沒有此選項,則會引用具有“異常”字符的路徑名,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。 ``` --name-only ``` 僅顯示已更改文件的名稱。 ``` --name-status ``` 僅顯示已更改文件的名稱和狀態。有關狀態字母的含義,請參閱`--diff-filter`選項的說明。 ``` --submodule[=<format>] ``` 指定子模塊的差異如何顯示。指定`--submodule=short`時,使用_短_格式。此格式僅顯示范圍開頭和結尾的提交名稱。指定`--submodule`或`--submodule=log`時,使用 _log_ 格式。此格式列出 [git-submodule [1]](https://git-scm.com/docs/git-submodule) `summary`等范圍內的提交。指定`--submodule=diff`時,使用 _diff_ 格式。此格式顯示提交范圍之間子模塊內容更改的內聯差異。如果未設置配置選項,則默認為`diff.submodule`或_短_格式。 ``` --color[=<when>] ``` 顯示彩色差異。 `--color`(即沒有 _=&lt;當&gt;_ )與`--color=always`相同時。 _&lt; when&gt;_ 可以是`always`,`never`或`auto`之一。 ``` --no-color ``` 關掉彩色差異。它與`--color=never`相同。 ``` --color-moved[=<mode>] ``` 移動的代碼行的顏色不同。 &lt;模式&gt;如果沒有給出選項,默認為 _no_ ,如果給出沒有模式的選項,則默認為 _zebra_ 。模式必須是以下之一: ``` no ``` 移動的線條不會突出顯示。 ``` default ``` 是`zebra`的同義詞。這可能會在未來轉變為更明智的模式。 ``` plain ``` 在一個位置添加并在另一個位置刪除的任何行都將使用 _color.diff.newMoved_ 進行著色。類似地, _color.diff.oldMoved_ 將用于在diff中的其他位置添加的已刪除行。此模式選擇任何已移動的行,但在檢查中確定是否在沒有置換的情況下移動了代碼塊時,它不是很有用。 ``` blocks ``` 貪婪地檢測至少20個字母數字字符的移動文本塊。使用 _color.diff。{old,new} Moved_ 顏色繪制檢測到的塊。相鄰的街區不能分開。 ``` zebra ``` 在_塊_模式中檢測移動文本塊。使用 _color.diff。{old,new} Moved_ 顏色或 _color.diff。{old,new} MovedAlternative_ 繪制塊。兩種顏色之間的變化表示檢測到新的塊。 ``` dimmed-zebra ``` 與 _zebra_ 類似,但執行了移動代碼的無趣部分的額外調暗。兩個相鄰街區的邊界線被認為是有趣的,其余的是無趣的。 `dimmed_zebra`是不推薦使用的同義詞。 ``` --no-color-moved ``` 關閉移動檢測。這可用于覆蓋配置設置。它與`--color-moved=no`相同。 ``` --color-moved-ws=<modes> ``` 這將配置在執行`--color-moved`的移動檢測時如何忽略空白。這些模式可以以逗號分隔的列表給出: ``` no ``` 執行移動檢測時不要忽略空格。 ``` ignore-space-at-eol ``` 忽略EOL中的空白更改。 ``` ignore-space-change ``` 忽略空格量的變化。這會忽略行尾的空格,并將一個或多個空白字符的所有其他序列視為等效。 ``` ignore-all-space ``` 比較線條時忽略空格。即使一行有空格而另一行沒有空格,這也會忽略差異。 ``` allow-indentation-change ``` 最初忽略移動檢測中的任何空格,然后如果每行的空白變化相同,則僅將移動的代碼塊分組到塊中。這與其他模式不兼容。 ``` --no-color-moved-ws ``` 執行移動檢測時不要忽略空格。這可用于覆蓋配置設置。它與`--color-moved-ws=no`相同。 ``` --word-diff[=<mode>] ``` 使用&lt; mode&gt;顯示單詞diff。劃定改變的單詞。默認情況下,單詞由空格分隔;見下面的`--word-diff-regex`。 &lt;模式&gt;默認為 _plain_ ,必須是以下之一: ``` color ``` 僅使用顏色突出顯示更改的單詞。意味著`--color`。 ``` plain ``` 將單詞顯示為`[-removed-]`和`{+added+}`。如果它們出現在輸入中,則不會嘗試轉義分隔符,因此輸出可能不明確。 ``` porcelain ``` 使用特殊的基于行的格式用于腳本使用。添加/刪除/未更改的運行以通常的統一diff格式打印,從行開頭的`+` / `-` /``字符開始并延伸到行尾。輸入中的換行符由其自身行上的波浪號`~`表示。 ``` none ``` 再次禁用字差異。 請注意,盡管第一個模式的名稱,但如果啟用了顏色,則使用顏色突出顯示所有模式中已更改的部分。 ``` --word-diff-regex=<regex> ``` 使用&lt; regex&gt;決定一個單詞是什么,而不是將非空格的運行視為一個單詞。除非已經啟用,否則還暗示`--word-diff`。 &lt; regex&gt;的每個非重疊匹配被認為是一個詞。這些匹配之間的任何內容都被視為空格并被忽略(!)以查找差異。您可能希望將`|[^[:space:]]`附加到正則表達式,以確保它匹配所有非空白字符。包含換行符的匹配項會在換行符處以靜默方式截斷(!)。 例如,`--word-diff-regex=.`會將每個字符視為一個單詞,并相應地逐個字符地顯示差異。 正則表達式也可以通過diff驅動程序或配置選項設置,參見 [gitattributes [5]](https://git-scm.com/docs/gitattributes) 或 [git-config [1]](https://git-scm.com/docs/git-config) 。明確地覆蓋任何差異驅動程序或配置設置。 Diff驅動程序覆蓋配置設置。 ``` --color-words[=<regex>] ``` 相當于`--word-diff=color`加(如果指定了正則表達式)`--word-diff-regex=&lt;regex&gt;`。 ``` --no-renames ``` 關閉重命名檢測,即使配置文件提供默認值也是如此。 ``` --check ``` 如果更改引入沖突標記或空白錯誤,則發出警告。什么被認為是空白錯誤由`core.whitespace`配置控制。默認情況下,尾隨空格(包括僅由空格組成的行)和在行的初始縮進內緊跟著制表符的空格字符被視為空格錯誤。如果發現問題,則退出非零狀態。與--exit-code不兼容。 ``` --ws-error-highlight=<kind> ``` 突出顯示差異的`context`,`old`或`new`行中的空白錯誤。多個值用逗號分隔,`none`重置先前的值,`default`將列表重置為`new`,`all`是`old,new,context`的簡寫。如果未指定此選項,并且未設置配置變量`diff.wsErrorHighlight`,則僅突出顯示`new`行中的空白錯誤。空白錯誤用`color.diff.whitespace`著色。 ``` --full-index ``` 在生成補丁格式輸出時,在“索引”行上顯示完整的前映像和后映像blob對象名稱,而不是第一個字符。 ``` --binary ``` 除`--full-index`外,還可輸出可用`git-apply`應用的二進制差異。 ``` --abbrev[=<n>] ``` 而不是在diff-raw格式輸出和diff-tree標題行中顯示完整的40字節十六進制對象名稱,而是僅顯示部分前綴。這與上面的`--full-index`選項無關,后者控制diff-patch輸出格式。可以使用`--abbrev=&lt;n&gt;`指定非默認位數。 ``` -B[<n>][/<m>] ``` ``` --break-rewrites[=[<n>][/<m>]] ``` 將完整的重寫更改分為刪除和創建對。這有兩個目的: 它影響了一個更改的方式,相當于一個文件的完全重寫,而不是一系列的刪除和插入混合在一起,只有幾行恰好與文本作為上下文匹配,而是作為單個刪除所有舊的后跟一個單個插入所有新內容,數字`m`控制-B選項的這一方面(默認為60%)。 `-B/70%`指定少于30%的原始文本應保留在結果中,以便Git將其視為完全重寫(即,否則生成的修補程序將是一系列刪除和插入與上下文行混合在一起)。 當與-M一起使用時,完全重寫的文件也被視為重命名的源(通常-M只考慮作為重命名源消失的文件),并且數字`n`控制 - 的這方面 - B選項(默認為50%)。 `-B20%`指定添加和刪除的更改與文件大小的20%或更多相比,有資格被選為可能的重命名源到另一個文件。 ``` -M[<n>] ``` ``` --find-renames[=<n>] ``` 如果生成差異,則檢測并報告每次提交的重命名。對于遍歷歷史記錄時重命名后續文件,請參閱`--follow`。如果指定了`n`,則它是相似性指數的閾值(即與文件大小相比的添加/刪除量)。例如,`-M90%`表示如果超過90%的文件未更改,Git應將刪除/添加對視為重命名。如果沒有`%`符號,則該數字將作為分數讀取,并在其前面加上小數點。即,`-M5`變為0.5,因此與`-M50%`相同。同樣,`-M05`與`-M5%`相同。要將檢測限制為精確重命名,請使用`-M100%`。默認相似性指數為50%。 ``` -C[<n>] ``` ``` --find-copies[=<n>] ``` 檢測副本以及重命名。另見`--find-copies-harder`。如果指定了`n`,則其含義與`-M&lt;n&gt;`的含義相同。 ``` --find-copies-harder ``` 出于性能原因,默認情況下,僅當在同一變更集中修改了副本的原始文件時,`-C`選項才會查找副本。此標志使命令檢查未修改的文件作為副本源的候選者。對于大型項目來說,這是一項非常昂貴的操作,因此請謹慎使用。提供多個`-C`選項具有相同的效果。 ``` -D ``` ``` --irreversible-delete ``` 省略刪除的原像,即只打印標題而不打印原像和`/dev/null`之間的差異。得到的貼片不適用于`patch`或`git apply`;這僅適用于那些希望在更改后專注于審閱文本的人。此外,輸出顯然缺乏足夠的信息來反向應用這樣的補丁,甚至手動,因此選項的名稱。 與`-B`一起使用時,也省略刪除/創建對的刪除部分中的原像。 ``` -l<num> ``` `-M`和`-C`選項需要O(n ^ 2)處理時間,其中n是潛在的重命名/復制目標的數量。如果重命名/復制目標的數量超過指定的數量,此選項可防止重命名/復制檢測運行。 ``` --diff-filter=[(A|C|D|M|R|T|U|X|B)…?[*]] ``` 僅選擇已添加(`A`),復制(`C`),已刪除(`D`),已修改(`M`),已重命名(`R`)的文件,其類型(即常規文件,符號鏈接,子模塊,...)更改(`T`),未合并(`U`),未知(`X`),或已配對破碎(`B`)。可以使用過濾器字符的任何組合(包括無)。當`*`(全部或全部)添加到組合中時,如果有任何文件與比較中的其他條件匹配,則選擇所有路徑;如果沒有與其他條件匹配的文件,則不會選擇任何內容。 此外,這些大寫字母可以降級為排除。例如。 `--diff-filter=ad`排除添加和刪除的路徑。 請注意,并非所有差異都可以包含所有類型。例如,從索引到工作樹的差異永遠不會有添加條目(因為差異中包含的路徑集受限于索引中的內容)。同樣,如果禁用了對這些類型的檢測,則無法顯示復制和重命名的條目。 ``` -S<string> ``` 查找改變文件中指定字符串出現次數(即添加/刪除)的差異。用于腳本編寫者的使用。 當你正在尋找一個確切的代碼塊(比如一個結構體)時,它很有用,并且想要知道該塊首次出現以來的歷史:迭代地使用該特征將原始圖像中的有趣塊反饋回`-S`,繼續前進,直到你獲得該塊的第一個版本。 也搜索二進制文件。 ``` -G<regex> ``` 查找補丁文本包含與&lt; regex&gt;匹配的添加/刪除行的差異。 為了說明`-S&lt;regex&gt; --pickaxe-regex`和`-G&lt;regex&gt;`之間的區別,請考慮在同一文件中使用以下diff進行提交: ``` + return !regexec(regexp, two->ptr, 1, &regmatch, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0); ``` 雖然`git log -G"regexec\(regexp"`將顯示此提交,但`git log -S"regexec\(regexp" --pickaxe-regex`不會(因為該字符串的出現次數沒有改變)。 除非提供`--text`,否則將忽略沒有textconv過濾器的二進制文件的補丁。 有關詳細信息,請參閱 [gitdiffcore [7]](https://git-scm.com/docs/gitdiffcore) 中的 _pickaxe_ 條目。 ``` --find-object=<object-id> ``` 查找更改指定對象出現次數的差異。與`-S`類似,只是參數的不同之處在于它不搜索特定的字符串,而是搜索特定的對象id。 該對象可以是blob或子模塊提交。它意味著`git-log`中的`-t`選項也可以找到樹。 ``` --pickaxe-all ``` 當`-S`或`-G`找到更改時,顯示該更改集中的所有更改,而不僅僅是包含&lt; string&gt;中更改的文件。 ``` --pickaxe-regex ``` 對待&lt; string&gt;賦予`-S`作為擴展的POSIX正則表達式以匹配。 ``` -O<orderfile> ``` 控制文件在輸出中的顯示順序。這會覆蓋`diff.orderFile`配置變量(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。要取消`diff.orderFile`,請使用`-O/dev/null`。 輸出順序由&lt; orderfile&gt;中的glob模式的順序決定。首先輸出所有與第一個模式匹配的路徑名的文件,然后輸出所有與第二個模式(但不是第一個模式)匹配的路徑名的文件,依此類推。路徑名與任何模式都不匹配的所有文件都是最后輸出的,就好像文件末尾有一個隱式匹配所有模式一樣。如果多個路徑名具有相同的等級(它們匹配相同的模式但沒有早期模式),則它們相對于彼此的輸出順序是正常順序。 &lt; orderfile&gt;解析如下: * 空行被忽略,因此可以將它們用作分隔符以提高可讀性。 * 以哈希(“`#`”)開頭的行將被忽略,因此它們可用于注釋。如果以散列開頭,則將反斜杠(“`\`”)添加到模式的開頭。 * 每個其他行包含一個模式。 模式與沒有FNM_PATHNAME標志的fnmatch(3)使用的模式具有相同的語法和語義,但如果刪除任意數量的最終路徑名組件與模式匹配,則路徑名也匹配模式。例如,模式“`foo*bar`”匹配“`fooasdfbar`”和“`foo/bar/baz/asdf`”而不匹配“`foobarx`”。 ``` -R ``` 交換兩個輸入;也就是說,顯示從索引或磁盤文件到樹內容的差異。 ``` --relative[=<path>] ``` 從項目的子目錄運行時,可以告訴它排除目錄外的更改并使用此選項顯示相對于它的路徑名。當您不在子目錄中時(例如,在裸存儲庫中),您可以通過給出&lt; path&gt;來命名哪個子目錄以使輸出相對。作為一個論點。 ``` -a ``` ``` --text ``` 將所有文件視為文本。 ``` --ignore-cr-at-eol ``` 進行比較時,忽略行尾的回車。 ``` --ignore-space-at-eol ``` 忽略EOL中的空白更改。 ``` -b ``` ``` --ignore-space-change ``` 忽略空格量的變化。這會忽略行尾的空格,并將一個或多個空白字符的所有其他序列視為等效。 ``` -w ``` ``` --ignore-all-space ``` 比較線條時忽略空格。即使一行有空格而另一行沒有空格,這也會忽略差異。 ``` --ignore-blank-lines ``` 忽略其行全部為空的更改。 ``` --inter-hunk-context=<lines> ``` 顯示差異之間的上下文,直到指定的行數,從而融合彼此接近的帥哥。如果未設置配置選項,則默認為`diff.interHunkContext`或0。 ``` -W ``` ``` --function-context ``` 顯示整個周圍的變化功能。 ``` --ext-diff ``` 允許執行外部diff助手。如果使用 [gitattributes [5]](https://git-scm.com/docs/gitattributes) 設置外部差異驅動程序,則需要將此選項與 [git-log [1]](https://git-scm.com/docs/git-log) 和朋友一起使用。 ``` --no-ext-diff ``` 禁止外部差異驅動程序。 ``` --textconv ``` ``` --no-textconv ``` 在比較二進制文件時允許(或禁止)外部文本轉換過濾器運行。有關詳細信息,請參閱 [gitattributes [5]](https://git-scm.com/docs/gitattributes) 。由于textconv過濾器通常是單向轉換,因此生成的差異適合人類使用,但無法應用。因此,默認情況下,textconv過濾器僅針對 [git-diff [1]](https://git-scm.com/docs/git-diff) 和 [git-log [1]](https://git-scm.com/docs/git-log) 啟用,但不適用于 [git-format-patch [ 1]](https://git-scm.com/docs/git-format-patch) 或差異管道命令。 ``` --ignore-submodules[=<when>] ``` 忽略差異生成中子模塊的更改。 &lt;當&gt;可以是“none”,“untracked”,“dirty”或“all”,這是默認值。使用“none”時,如果子模塊包含未跟蹤或修改的文件,或者其HEAD與超級項目中記錄的提交不同,則可以使用“無”來修改子模塊,并可用于覆蓋[中 _ignore_ 選項的任何設置git-config [1]](https://git-scm.com/docs/git-config) 或 [gitmodules [5]](https://git-scm.com/docs/gitmodules) 。當使用“未跟蹤”時,如果子模塊僅包含未跟蹤的內容(但仍會掃描修改的內容),則子模塊不會被視為臟。使用“臟”忽略對子模塊工作樹的所有更改,僅顯示存儲在超級項目中的提交的更改(這是1.7.0之前的行為)。使用“all”隱藏子模塊的所有更改。 ``` --src-prefix=<prefix> ``` 顯示給定的源前綴而不是“a /”。 ``` --dst-prefix=<prefix> ``` 顯示給定的目標前綴而不是“b /”。 ``` --no-prefix ``` 不顯示任何源或目標前綴。 ``` --line-prefix=<prefix> ``` 為每行輸出預先附加前綴。 ``` --ita-invisible-in-index ``` 默認情況下,“git add -N”添加的條目在“git diff”中顯示為現有空文件,在“git diff --cached”中顯示為新文件。此選項使條目在“git diff”中顯示為新文件,在“git diff --cached”中不存在。可以使用`--ita-visible-in-index`恢復此選項。這兩個選項都是實驗性的,將來可以刪除。 有關這些常用選項的更詳細說明,另請參閱 [gitdiffcore [7]](https://git-scm.com/docs/gitdiffcore) 。 ## 使用-p生成補丁 當“git-diff-index”,“git-diff-tree”或“git-diff-files”使用`-p`選項運行時,“git diff”不帶`--raw`選項或“git log”使用“-p”選項,它們不會產生上述輸出;相反,他們生成一個補丁文件。您可以通過`GIT_EXTERNAL_DIFF`和`GIT_DIFF_OPTS`環境變量自定義此類修補程序的創建。 -p選項產生的內容與傳統的diff格式略有不同: 1. 它前面有一個“git diff”標題,如下所示: ``` diff --git a/file1 b/file2 ``` 除非涉及重命名/復制,否則`a/`和`b/`文件名是相同的。特別是,即使是創建或刪除,`/dev/null`也是_而不是_來代替`a/`或`b/`文件名。 當涉及重命名/復制時,`file1`和`file2`分別顯示重命名/復制的源文件的名稱和重命名/復制的文件的名稱。 2. 它后跟一個或多個擴展標題行: ``` old mode &lt;mode&gt; new mode &lt;mode&gt; deleted file mode &lt;mode&gt; new file mode &lt;mode&gt; copy from &lt;path&gt; copy to &lt;path&gt; rename from &lt;path&gt; rename to &lt;path&gt; similarity index &lt;number&gt; dissimilarity index &lt;number&gt; index &lt;hash&gt;..&lt;hash&gt; &lt;mode&gt; ``` 文件模式打印為6位八進制數,包括文件類型和文件權限位。 擴展標頭中的路徑名不包括`a/`和`b/`前綴。 相似性指數是未更改行的百分比,相異性指數是更改行的百分比。它是一個向下舍入的整數,后跟一個百分號。因此,100%的相似性索引值保留用于兩個相等的文件,而100%的相異性意味著舊文件中的任何行都不會成為新文件。 索引行包括更改前后的SHA-1校驗和。 &lt;模式&gt;如果文件模式沒有改變,則包括在內;否則,單獨的行表示舊模式和新模式。 3. 具有“異常”字符的路徑名被引用,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。 4. 輸出中的所有`file1`文件在提交之前引用文件,并且所有`file2`文件在提交之后引用文件。將每個更改順序應用于每個文件是不正確的。例如,此補丁將交換a和b: ``` diff --git a/a b/b rename from a rename to b diff --git a/b b/a rename from b rename to a ``` ## 組合差異格式 在顯示合并時,任何差異生成命令都可以使用`-c`或`--cc`選項生成_組合差異_。當顯示與 [git-diff [1]](https://git-scm.com/docs/git-diff) 或 [git-show [1]](https://git-scm.com/docs/git-show) 的合并時,這是默認格式。另請注意,您可以為這些命令中的任何一個提供`-m`選項,以強制使用合并的各個父項生成差異。 _組合diff_ 格式如下所示: ``` diff --combined describe.c index fabadb8,cc95eb0..4866510 --- a/describe.c +++ b/describe.c @@@ -98,20 -98,12 +98,20 @@@ return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1; } - static void describe(char *arg) -static void describe(struct commit *cmit, int last_one) ++static void describe(char *arg, int last_one) { + unsigned char sha1[20]; + struct commit *cmit; struct commit_list *list; static int initialized = 0; struct commit_name *n; + if (get_sha1(arg, sha1) < 0) + usage(describe_usage); + cmit = lookup_commit_reference(sha1); + if (!cmit) + usage(describe_usage); + if (!initialized) { initialized = 1; for_each_ref(get_name); ``` 1. 它前面有一個“git diff”標題,看起來像這樣(當使用`-c`選項時): ``` diff --combined file ``` 或者像這樣(當使用`--cc`選項時): ``` diff --cc file ``` 2. 它后跟一個或多個擴展標題行(此示例顯示了與兩個父項的合并): ``` index &lt;hash&gt;,&lt;hash&gt;..&lt;hash&gt; mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt; new file mode &lt;mode&gt; deleted file mode &lt;mode&gt;,&lt;mode&gt; ``` 只有當&lt; mode&gt;中的至少一個出現時,`mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt;`行才會出現。與其他人不同。具有關于檢測到的內容移動(重命名和復制檢測)的信息的擴展標題被設計為與兩個&lt; tree-ish&gt;的差異一起工作。并且不會被組合diff格式使用。 3. 接下來是兩行的文件/文件頭 ``` --- a/file +++ b/file ``` 與傳統_統一_ diff格式的雙行標題類似,`/dev/null`用于表示創建或刪除的文件。 4. 修改了塊頭格式以防止人們意外地將其饋送到`patch -p1`。創建組合差異格式用于審查合并提交更改,并不適用于應用。此更改類似于擴展_索引_標頭中的更改: ``` @@@ &lt;from-file-range&gt; &lt;from-file-range&gt; &lt;to-file-range&gt; @@@ ``` 組合diff格式的塊頭中有(父項數+ 1)`@`個字符。 與傳統的_統一_差異格式不同,后者顯示兩個文件A和B,其中一列具有`-`(減去 - 出現在A中但在B中刪除),`+`(加 - 缺少A但是添加到B)或`" "`(空格 - 未更改)前綴,此格式將兩個或多個文件file1,file2,...與一個文件X進行比較,并顯示X與每個文件N的不同之處。每個fileN的一列被添加到輸出行之前,以指示X的行與它的不同之處。 N列中的`-`字符表示該行出現在fileN中,但它不會出現在結果中。列N中的`+`字符表示該行出現在結果中,而fileN沒有該行(換句話說,從該父項的角度添加了該行)。 在上面的示例輸出中,函數簽名已從兩個文件中更改(因此,file1和file2中的兩個`-`刪除加上`++`表示添加的一行未出現在file1或file2中)。另外八行與file1相同,但不出現在file2中(因此以`+`為前綴)。 當由`git diff-tree -c`顯示時,它將合并提交的父項與合并結果進行比較(即file1..fileN是父項)。當由`git diff-files -c`顯示時,它將兩個未解析的合并父項與工作樹文件進行比較(即file1是階段2又名“我們的版本”,file2是階段3又名“他們的版本”)。 ## 例子 ``` git log --no-merges ``` 顯示整個提交歷史記錄,但跳過任何合并 ``` git log v2.6.12.. include/scsi drivers/scsi ``` 顯示自版本 _v2.6.12_ 以來更改`include/scsi`或`drivers/scsi`子目錄中的任何文件的所有提交 ``` git log --since="2 weeks ago" -- gitk ``` 在過去兩周內將更改顯示到文件 _gitk_ 。 `--`是必要的,以避免與名為 _gitk_ 的**分支**混淆 ``` git log --name-status release..test ``` 顯示“test”分支中但尚未在“release”分支中的提交,以及每個提交修改的路徑列表。 ``` git log --follow builtin/rev-list.c ``` 顯示更改`builtin/rev-list.c`的提交,包括在文件被賦予其當前名稱之前發生的提交。 ``` git log --branches --not --remotes=origin ``` 顯示任何本地分支中的所有提交,但不顯示_原點_的任何遠程跟蹤分支中的所有提交(您的原點沒有)。 ``` git log master --not --remotes=*/master ``` 顯示本地主服務器中但不在任何遠程存儲庫主分支中的所有提交。 ``` git log -p -m --first-parent ``` 顯示包含更改差異的歷史記錄,但僅顯示“主分支”透視圖,跳過來自合并分支的提交,并顯示合并引入的完整更改差異。只有遵循嚴格的策略,在停留在單個集成分支上時合并所有主題分支才有意義。 ``` git log -L '/int main/',/^}/:main.c ``` 顯示文件`main.c`中的函數`main()`如何隨時間演變。 ``` git log -3 ``` 將要顯示的提交數限制為3。 ## 討論 Git在某種程度上是字符編碼不可知的。 * blob對象的內容是未解釋的字節序列。核心級別沒有編碼轉換。 * 路徑名以UTF-8規范化形式C編碼。這適用于樹對象,索引文件,ref名稱,以及命令行參數,環境變量和配置文件中的路徑名(`.git/config`(參見 [git) -config [1]](https://git-scm.com/docs/git-config) ), [gitignore [5]](https://git-scm.com/docs/gitignore) , [gitattributes [5]](https://git-scm.com/docs/gitattributes) 和 [gitmodules [5]](https://git-scm.com/docs/gitmodules) )。 請注意,核心級別的Git僅將路徑名稱視為非NUL字節序列,沒有路徑名稱編碼轉換(Mac和Windows除外)。因此,即使在使用傳統擴展ASCII編碼的平臺和文件系統上,使用非ASCII路徑名也會起作用。但是,在此類系統上創建的存儲庫將無法在基于UTF-8的系統(例如Linux,Mac,Windows)上正常工作,反之亦然。此外,許多基于Git的工具只是假設路徑名為UTF-8,并且無法正確顯示其他編碼。 * 提交日志消息通常以UTF-8編碼,但也支持其他擴展ASCII編碼。這包括ISO-8859-x,CP125x和許多其他,但_不是_ UTF-16/32,EBCDIC和CJK多字節編碼(GBK,Shift-JIS,Big5,EUC-x,CP9xx等。 )。 雖然我們鼓勵提交日志消息以UTF-8編碼,但核心和Git瓷器都不是為了強制項目使用UTF-8。如果特定項目的所有參與者發現使用遺留編碼更方便,Git不會禁止它。但是,有一些事情需要牢記。 1. _git commit_ 和 _git commit-tree_ 發出警告,如果提供給它的提交日志消息看起來不像有效的UTF-8字符串,除非你明確說你的項目使用了遺產編碼。說這個的方法是在`.git/config`文件中使用i18n.commitencoding,如下所示: ``` [i18n] commitEncoding = ISO-8859-1 ``` 使用上述設置創建的提交對象在其`encoding`標題中記錄`i18n.commitEncoding`的值。這是為了幫助其他人以后再看。缺少此標頭意味著提交日志消息以UTF-8編碼。 2. _git log_ , _git show_ , _git blame_ 和朋友們查看提交對象的`encoding`頭,并嘗試將日志消息重新編碼為除非另有說明,否則為UTF-8。您可以使用`.git/config`文件中的`i18n.logOutputEncoding`指定所需的輸出編碼,如下所示: ``` [i18n] logOutputEncoding = ISO-8859-1 ``` 如果您沒有此配置變量,則使用`i18n.commitEncoding`的值。 請注意,我們故意選擇在提交以在提交對象級別強制使用UTF-8時不重新編寫提交日志消息,因為重新編碼為UTF-8不一定是可逆操作。 ## 組態 對于核心變量,請參見 [git-config [1]](https://git-scm.com/docs/git-config) ,對于差異生成,請參見 [git-diff [1]](https://git-scm.com/docs/git-diff) 。 ``` format.pretty ``` `--format`選項的默認值。 (參見上面的_漂亮格式_。)默認為`medium`。 ``` i18n.logOutputEncoding ``` 顯示日志時使用的編碼。 (參見上面的_討論_。)如果設置,則默認為`i18n.commitEncoding`的值,否則為UTF-8。 ``` log.date ``` 人類可讀日期的默認格式。 (比較`--date`選項。)默認為“默認”,表示寫入`Sat May 8 19:35:34 2010 -0500`等日期。 如果格式設置為“auto:foo”并且正在使用尋呼機,則格式“foo”將用于日期格式。否則將使用“默認”。 ``` log.follow ``` 如果`true`,`git log`將像單個&lt;路徑&gt;一樣使用`--follow`選項。給出。這與`--follow`具有相同的限制,即它不能用于跟蹤多個文件,并且在非線性歷史記錄上不能很好地工作。 ``` log.showRoot ``` 如果`false`,`git log`和相關命令不會將初始提交視為大創建事件。 `git log -p`輸出中的任何根提交都將顯示沒有附加差異。默認值為`true`。 ``` log.showSignature ``` 如果`true`,`git log`和相關命令的作用就像傳遞了`--show-signature`選項一樣。 ``` mailmap.* ``` 見 [git-shortlog [1]](https://git-scm.com/docs/git-shortlog) 。 ``` notes.displayRef ``` 除了`core.notesRef`或`GIT_NOTES_REF`設置的默認值之外,還使用`log`系列命令顯示提交消息時的注釋。見 [git-notes [1]](https://git-scm.com/docs/git-notes) 。 可以是未縮寫的引用名稱或glob,可以多次指定。將為不存在的引用發出警告,但是會自動忽略與任何引用不匹配的glob。 可以通過`--no-notes`選項禁用此設置,由`GIT_NOTES_DISPLAY_REF`環境變量覆蓋,并由`--notes=&lt;ref&gt;`選項覆蓋。 ## GIT 部分 [git [1]](https://git-scm.com/docs/git) 套件
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看