<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # git-diff > 原文: [https://git-scm.com/docs/git-diff](https://git-scm.com/docs/git-diff) > > 貢獻者:[honglyua](https://github.com/honglyua) ## 名稱 git-diff - 顯示提交之前,提交和工作樹之間的更改等 ## 概要 ``` git diff [<options>] [<commit>] [--] [<path>…?] git diff [<options>] --cached [<commit>] [--] [<path>…?] git diff [<options>] <commit> <commit> [--] [<path>…?] git diff [<options>] <blob> <blob> git diff [<options>] --no-index [--] <path> <path> ``` ## 描述 顯示工作樹與索引或樹之間的更改,索引與樹之間的更改,兩個樹之間的更改,兩個blob對象之間的更改或磁盤上兩個文件之間的更改。 ``` git diff [<options>] [--] [<path>…?] ``` 此表單用于查看您相對于索引所做的更改(下一次提交的暫存區域)。換句話說,差異就是你 _可以_ 告訴Git即將要添加,但還沒有添加到索引的內容。您可以使用 [git-add [1]](https://git-scm.com/docs/git-add) 暫存這些更改。 ``` git diff [<options>] --no-index [--] <path> <path> ``` 此表單用于比較文件系統上給定的兩個路徑。在由Git控制的工作樹中運行命令時,可以省略`--no-index`選項,并且至少有一個路徑指向工作樹外部,或者在Git控制的工作樹外運行命令。 ``` git diff [<options>] --cached [<commit>] [--] [<path>…?] ``` 此表單用于查看您為下一次提交而暫存的內容與已經<commit>的內容之間的更改。通常,您希望與最新提交進行比較,因此如果您不提供<commit>,則默認為HEAD。如果HEAD不存在(例如未出生的分支)并且<commit>沒有給出,它將顯示所有暫存的更改。--staged是--cached的同義詞。 ``` git diff [<options>] <commit> [--] [<path>…?] ``` 此表單用于查看工作樹中相對于已經提交<commit>的更改。您可以使用HEAD將其與最新提交進行比較,或使用分支名稱與其他分支的提示進行比較。 ``` git diff [<options>] <commit> <commit> [--] [<path>…?] ``` 這是為了查看兩個任意<commit>之間的更改。 ``` git diff [<options>] <commit>..<commit> [--] [<path>…?] ``` 這與之前的表格同義。如果<commit>在一側被省略,它將具有與使用HEAD相同的效果。 ``` git diff [<options>] <commit>...<commit> [--] [<path>…?] ``` 此表單用于查看分支上的更改,從兩個<commit>的共同祖先開始,包含第二個<commit>及以上的節點。 “git diff A ... B”相當于“git diff $(git merge-base A B)B”。您可以省略<commit>中的任何一個,它與使用HEAD具有相同的效果。 如果你正在做一些特殊操作,應該注意在上面描述中的所有<commit>,除了使用“..”符號的最后兩種形式之外,可以是任何<tree>。 有關拼寫<commit>的更完整列表的詳細列表,請參閱 [gitrevisions [7]](https://git-scm.com/docs/gitrevisions) 中的“指定修訂”部分。然而,“diff”是關于比較兩個 _端點_,而不是范圍和范圍符號(“<commit>..<commit>”和“<commit> ...<commit> “)并不是指 [gitrevisions [7]](https://git-scm.com/docs/gitrevisions) 中”指定范圍“部分中定義的范圍。 ``` git diff [<options>] <blob> <blob> ``` 此表單用于查看兩個blob對象的原始內容之間的差異。 ## 選項 ``` -p ``` ``` -u ``` ``` --patch ``` 生成補丁(請參閱生成補丁的部分)。這是默認值。 ``` -s ``` ``` --no-patch ``` 抑制差異輸出。對于`git show`等默認顯示補丁的命令,或取消`--patch`的效果很有用。 ``` -U<n> ``` ``` --unified=<n> ``` 生成<n>行的上下文差異。而不是通常的三行。意味著`--patch`或`-p`。 ``` --output=<file> ``` 輸出到指定文件匯總,而不是標準輸出中。 ``` --output-indicator-new=<char> ``` ``` --output-indicator-old=<char> ``` ``` --output-indicator-context=<char> ``` 在生成補丁時,用特殊字符表明哪些行時new,old,context。通常是用 +, - and ' '。 ``` --raw ``` 以原始格式生成diff。 ``` --patch-with-raw ``` `-p --raw`的同義詞。 ``` --indent-heuristic ``` 啟用改變差異塊邊界的啟發式以使補丁更易于閱讀。這是默認值。 ``` --no-indent-heuristic ``` 禁用縮進啟發式。 ``` --minimal ``` 花些額外的時間來確保產生盡可能小的差異。 ``` --patience ``` 使用“patience diff”算法生成差異。 ``` --histogram ``` 使用“histogram diff”算法生成差異。 ``` --anchored=<text> ``` 使用“anchored diff”算法生成差異。 可以多次指定此選項。 如果源和目標中都存在一行,只存在一次,并以此文本開頭,則此算法會嘗試阻止它在輸出中顯示為刪除或添加。它在內部使用“patience diff”算法。 ``` --diff-algorithm={patience|minimal|histogram|myers} ``` 選擇差異算法。變體如下: ``` default, myers ``` 基本的貪心差異算法。目前,這是默認值。 ``` minimal ``` 花些額外的時間來確保產生盡可能小的差異。 ``` patience ``` 生成補丁時使用“patience diff”算法。 ``` histogram ``` 該算法將”patience diff“算法擴展為“支持低發生的共同元素”。 例如,如果將`diff.algorithm`變量配置為非默認值并想要使用默認值,則必須使用`--diff-algorithm=default`選項。 ``` --stat[=<width>[,<name-width>[,<count>]]] ``` 生成diffstat。默認情況下,文件名部分,圖形部分的其余部分將使用必要的空間。最大寬度默認為終端寬度,如果未連接到終端,則為80列,并且可以被`<width>`覆蓋。可以通過在逗號后面給出另一個寬度`<name-width>`來限制文件名部分的寬度。可以使用`--stat-graph-width=<width>`(影響生成統計圖的所有命令)或設置`diff.statGraphWidth=<width>`(不影響`git format-patch`)來限制圖形部分的寬度。通過給出第三個參數`<count>`,可以將輸出限制為第一個`<count>`行,如果有更多,則將以`...`表示。 也可以使用`--stat-width=<width>`,`--stat-name-width=<name-width>`和`--stat-count=<count>`單獨設置這些參數。 ``` --compact-summary ``` 輸出擴展標題信息的精簡摘要,例如文件創建或刪除(“新建”或“消失”,如果是符號鏈接,則可選“+l”)和文件權限更改(“+x”或“-x”用于添加或刪除diffstat中的可執行位)。信息放在文件名部分和圖形部分之間。意味著`--stat`。 ``` --numstat ``` 與`--stat`類似,但是為了更加友好,它用十進制顯示添加和刪除的行數以及沒有縮寫的路徑名。對于二進制文件,輸出兩個`-`而不是`0 0`。 ``` --shortstat ``` 僅輸出`--stat`格式的最后一行,其中包含已修改文件的總數,以及已添加和已刪除行的總數。 ``` -X[<param1,param2,…?>] ``` ``` --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`。 ``` --cumulative ``` 與--dirstat=cumulative相同 ``` --dirstat-by-file[=<param1,param2>…?] ``` 與--dirstat=files,param1,param2…相同 ``` --summary ``` 輸出擴展標題信息的精簡摘要,例如創建,重命名和模式更改。 ``` --patch-with-stat ``` 與`-p --stat`相同。 ``` -z ``` 當給出`--raw`,`--numstat`,`--name-only`或`--name-status`時,不使用路徑名和NUL作為輸出字段終止符。 如果沒有此選項,則會引用具有“異常”字符的路徑名,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。 ``` --name-only ``` 僅顯示已更改文件的名稱。 ``` --name-status ``` 僅顯示已更改文件的名稱和狀態。有關狀態字母的含義,請參閱`--diff-filter`選項的說明。 ``` --submodule[=<format>] ``` 指定子模塊的差異如何顯示。當指定`--submodule=short`時,使用 _short_ 格式。此格式僅顯示范圍開頭和結尾的提交名稱。當指定`--submodule`或`--submodule=log`時,使用 _log_ 格式。此格式列出所有commits的提交,類似[git-submodule [1]](https://git-scm.com/docs/git-submodule) 中`summary`的功能。當指定`--submodule=diff`時,使用 _diff_ 格式。此格式顯示提交范圍之間子模塊內容更改的內聯差異。如果未設置配置選項,則默認為`diff.submodule`或 _short_ 格式。 ``` --color[=<when>] ``` 顯示彩色差異。 `--color`(即沒有 _=<when>_ )與`--color=always`相同時。 _< when>_ 可以是`always`,`never`或`auto`之一。可以通過`color.ui`和`color.diff`配置設置進行更改。 ``` --no-color ``` 關掉彩色差異。這可用于覆蓋配置設置。它與`--color=never`相同。 ``` --color-moved[=<mode>] ``` 移動的代碼行的顏色不同。可以通過`diff.colorMoved`配置設置進行更改。如果沒有給出<mode>選項,則默認值為 _no_ ,如果給出沒有模式的選項,則默認為 _zebra_ 。模式必須是以下之一: ``` no ``` 移動的線條不會突出顯示。 ``` default ``` 是`zebra`的同義詞。這可能會在未來轉變為更明智的模式。 ``` plain ``` 在一個位置添加并在另一個位置刪除的任何行都將使用 _color.diff.newMoved_ 進行著色。類似地, _color.diff.oldMoved_ 將用于在diff中的其他位置添加的已刪除行。此模式選擇任何已移動的行,但在檢查中確定是否在沒有置換的情況下移動了代碼塊時,它不是很有用。 ``` blocks ``` 貪婪地檢測至少20個字母數字字符的移動文本塊。使用 _color.diff.{old,new} Moved_ 顏色繪制檢測到的塊。相鄰的塊不能分開。 ``` zebra ``` 在 _block_ 模式中檢測移動文本塊。使用 _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`的移動檢測時如何忽略空白。可以通過`diff.colorMovedWS`配置設置進行設置。這些模式可以以逗號分隔的列表給出: ``` 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>] ``` 使用< mode>顯示單詞diff。劃定改變的單詞。默認情況下,單詞由空格分隔;見下面的`--word-diff-regex`。 <mode>默認為 _plain_ ,或者是以下之一: ``` color ``` 僅使用顏色突出顯示更改的單詞。意味著`--color`。 ``` plain ``` 將單詞顯示為`[-removed-]`和`{+added+}`。如果它們出現在輸入中,則不會嘗試轉義分隔符,因此輸出可能不明確。 ``` porcelain ``` 使用特殊的基于行的格式用于腳本使用。添加/刪除/未更改的運行以通常的統一diff格式打印,從行開頭的`+` / `-` /``字符開始并延伸到行尾。輸入中的換行符由其自身行上的波浪號`~`表示。 ``` none ``` 再次禁用字差異。 請注意,如果啟用了顏色,在所有模式中將使用第一個模式的名稱,顏色突出顯示已更改的部分。 ``` --word-diff-regex=<regex> ``` 使用<regex>決定一個單詞是什么,而不是將非空格的運行視為一個單詞。除非已經啟用,否則還暗示`--word-diff`。 <regex>的每個非重疊匹配被認為是一個詞。這些匹配之間的任何內容都被視為空格并被忽略(!)以查找差異。您可能希望將`|[^[: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=<regex>`。 ``` --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`輸出二進制差異,`--patch`也可以。 ``` --abbrev[=<n>] ``` 不是在diff-raw格式輸出和diff-tree標題行中顯示完整的40字節十六進制對象名稱,而是僅顯示部分前綴。這與上面的`--full-index`選項無關,后者控制diff-patch輸出格式。可以使用`--abbrev=<n>`指定非默認位數。 ``` -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>] ``` 檢測重命名。如果指定了`n`,則它是相似性指數的閾值(即與文件大小相比的添加/刪除量)。例如,`-M90%`表示如果超過90%的文件未更改,Git應將刪除/添加對視為重命名。如果沒有`%`符號,則該數字將作為分數讀取,并在其前面加上小數點。即,`-M5`變為0.5,因此與`-M50%`相同。同樣,`-M05`與`-M5%`相同。要將檢測限制為精確重命名,請使用`-M100%`。默認相似性指數為50%。 ``` -C[<n>] ``` ``` --find-copies[=<n>] ``` 檢測副本以及重命名。另見`--find-copies-harder`。如果指定了`n`,則其含義與`-M<n>`的含義相同。 ``` --find-copies-harder ``` 出于性能原因,默認情況下,僅當在同一變更集中修改了副本的原始文件時,`-C`選項才會查找副本。此標志使命令檢查未修改的文件作為副本源的候選者。對于大型項目來說,這是一項非常昂貴的操作,因此請謹慎使用。提供多個`-C`選項具有相同的效果。 ``` -D ``` ``` --irreversible-delete ``` 省略刪除的原像,即只打印標題而不打印原像和`/dev/null`之間的差異。得到的patch不適用于`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> ``` 查找補丁文本包含與<regex>匹配的添加/刪除行的差異。 為了說明`-S<regex> --pickaxe-regex`和`-G<regex>`之間的區別,請考慮在同一文件中使用以下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`找到更改時,顯示該更改集中的所有更改,而不僅僅是包含< string>中更改的文件。 ``` --pickaxe-regex ``` 對待< string>賦予`-S`作為擴展的POSIX正則表達式以匹配。 ``` -O<orderfile> ``` 控制文件在輸出中的顯示順序。這會覆蓋`diff.orderFile`配置變量(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。要取消`diff.orderFile`,請使用`-O/dev/null`。 輸出順序由< orderfile>中的glob模式的順序決定。首先輸出所有與第一個模式匹配的路徑名的文件,然后輸出所有與第二個模式(但不是第一個模式)匹配的路徑名的文件,依此類推。路徑名與任何模式都不匹配的所有文件都是最后輸出的,就好像文件末尾有一個隱式匹配所有模式一樣。如果多個路徑名具有相同的等級(它們匹配相同的模式但沒有早期模式),則它們相對于彼此的輸出順序是正常順序。 <orderfile>解析如下: * 空行被忽略,因此可以將它們用作分隔符以提高可讀性。 * 以哈希(“`#`”)開頭的行將被忽略,因此它們可用于注釋。如果以哈希開頭,則將反斜杠(“`\`”)添加到模式的開頭。 * 每個其他行包含一個模式。 模式與沒有FNM_PATHNAME標志的fnmatch(3)使用模式具有相同的語法和語義,除匹配的路徑名之外,如果刪除任意數量的與模式匹配的最終路徑名組件。例如,模式“`foo*bar`”匹配“`fooasdfbar`”和“`foo/bar/baz/asdf`”而不匹配“`foobarx`”。 ``` -R ``` 交換兩個輸入;也就是說,顯示從索引或磁盤文件到樹內容的差異。 ``` --relative[=<path>] ``` 從項目的子目錄運行時,可以告訴它除目錄外的更改并使用此選項顯示相對于它的路徑名。當您不在子目錄中時(例如,在裸存儲庫中),您可以通過給出<path>作為一個參數來命名哪個子目錄以使輸出相對。 ``` -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 ``` 顯示整個周圍的變化功能。 ``` --exit-code ``` 使用類似于diff(1)的代碼退出程序。也就是說,如果存在差異則退出1,0表示沒有差異。 ``` --quiet ``` 禁用程序的所有輸出。意味著`--exit-code`。 ``` --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>] ``` 忽略差異生成中子模塊的更改。<when>可以是“none”,“untracked”,“dirty”或“all”,這是默認值。使用“none”時,如果子模塊包含未跟蹤或修改的文件,或者其HEAD與超級項目中記錄的提交不同,則可以使用“none”來修改子模塊,并可用于覆蓋[git-config [1]](https://git-scm.com/docs/git-config) 或 [gitmodules [5]](https://git-scm.com/docs/gitmodules)中 _ignore_ 選項的任何設置。當使用“untracked”時,如果子模塊僅包含未跟蹤的內容(但仍會掃描修改的內容),則子模塊不會被視為dirty。使用“dirty”忽略對子模塊工作樹的所有更改,僅顯示存儲在超級項目中的提交的更改(這是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) 。 ``` -1 --base ``` ``` -2 --ours ``` ``` -3 --theirs ``` 將工作樹與“基礎”版本(階段#1),“我們的分支”(階段#2)或“他們的分支”(階段#3)進行比較。索引僅包含針對未合并條目的這些階段,即在解決沖突時。有關詳細信息,請參閱 [git-read-tree [1]](https://git-scm.com/docs/git-read-tree) 部分“3-Way Merge”。 ``` -0 ``` 省略未合并條目的差異輸出,只顯示“未合并”。僅在將工作樹與索引進行比較時才能使用。 ``` <path>…? ``` <路徑>參數,當給定時,用于將diff限制為命名路徑(您可以為其下的所有文件提供目錄名稱和獲取差異)。 ## 原始輸出格式 來自“git-diff-index”,“git-diff-tree”,“git-diff-files”和“git diff -raw”的原始輸出格式非常相似。 這些命令都比較了兩組東西;比較的不同之處是: ``` git-diff-index <tree-ish> ``` 比較<tree-ish>以及文件系統上的文件。 ``` git-diff-index --cached <tree-ish> ``` 比較<tree-ish>和索引。 ``` git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>…?] ``` 比較兩個參數命名的樹。 ``` git-diff-files [<pattern>…?] ``` 比較索引和文件系統上的文件。 “git-diff-tree”命令通過打印正在比較的內容的哈希來開始輸出。之后,所有命令都會為每個更改的文件打印一個輸出行。 輸出行以這種方式格式化: ``` in-place edit :100644 100644 bcd1234 0123456 M file0 copy-edit :100644 100644 abcd123 1234567 C68 file1 file2 rename-edit :100644 100644 abcd123 1234567 R86 file1 file3 create :000000 100644 0000000 1234567 A file4 delete :100644 000000 1234567 0000000 D file5 unmerged :000000 000000 0000000 0000000 U file6 ``` 也就是說,從左到右: 1. 一個冒號。 2. “src”模式;如果創建或未合并,則為000000。 3. 空格。 4. “dst”模式;如果刪除或未合并,則為000000。 5. 空格。 6. sha1為“src”; 如果創建或未合并,則顯示0{40}。 7. 空格。 8. sha1為“dst”; 如果創建,未合并或“查看工作樹”,則顯示0{40}。 9. 空格。 10. 狀態,后跟可選的“數字”編號。 11. 使用`-z`選項時的選項卡或NUL。 12. “src”的路徑 13. 使用`-z`選項時的選項卡或NUL;僅適用于C或R. 14. “dst”的路徑;僅適用于C或R. 15. 使用`-z`選項時,LF或NUL終止記錄。 可能的狀態字母是: * A:添加文件 * C:將文件復制到新文件中 * D:刪除文件 * M:修改文件的內容或模式 * R:重命名文件 * T:更改文件類型 * U:文件已取消合并(您必須先完成合并才能提交) * X:“未知”更改類型(最有可能是錯誤,請報告) 狀態字母C和R后面總是跟一個分數(表示移動或復制的源和目標之間的相似性百分比)。狀態字母M之后可以是文件重寫的分數(表示不相似的百分比)。 <SHA1>如果文件系統上的文件是新文件并且它與索引不同步,則顯示為全0。 例: ``` :100644 100644 5be4a4a 0000000 M file.c ``` 如果沒有`-z`選項,則會引用具有“異常”字符的路徑名,如配置變量`core.quotePath`所述(參見 [git-config [1]](https://git-scm.com/docs/git-config) )。使用`-z`,文件名逐字輸出,行以NUL字節終止。 ## 用于合并的diff格式 “git-diff-tree”,“git-diff-files”和“git-diff --raw”可以使用`-c`或`--cc`選項為合并提交生成diff輸出。輸出與上述格式的不同之處如下: 1. 每個父母都有一個冒號 2. 還有更多“src”模式和“src”sha1 3. status是每個父級的連接狀態字符 4. 沒有可選的“分數”數字 5. 單路徑,僅適用于“dst” 例: ``` ::100644 100644 100644 fabadb8 cc95eb0 4866510 MM describe.c ``` 請注意,_組合diff_ 僅列出從所有父項修改的文件。 ## 使用-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 <mode> new mode <mode> deleted file mode <mode> new file mode <mode> copy from <path> copy to <path> rename from <path> rename to <path> similarity index <number> dissimilarity index <number> index <hash>..<hash> <mode> ``` 文件模式打印為6位八進制數,包括文件類型和文件權限位。 擴展標頭中的路徑名不包括`a/`和`b/`前綴。 相似性指數是未更改行的百分比,相異性指數是更改行的百分比。它是一個向下舍入的整數,后跟一個百分號。因此,100%的相似性索引值保留用于兩個相等的文件,而100%的相異性意味著舊文件中的任何行都不會成為新文件。 索引行包括更改前后的SHA-1校驗和。<mode>如果文件模式沒有改變,則包括在內;否則,單獨的行表示舊模式和新模式。 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 <hash>,<hash>..<hash> mode <mode>,<mode>..<mode> new file mode <mode> deleted file mode <mode>,<mode> ``` 只有當<mode>中的至少一個出現時,`mode <mode>,<mode>..<mode>`行才會出現。與其他人不同。具有關于檢測到的內容移動(重命名和復制檢測)的信息的擴展標題被設計為與兩個<tree-ish>的差異一起工作。并且不會被組合diff格式使用。 3. 接下來是兩行的文件/文件頭 ``` --- a/file +++ b/file ``` 與傳統 _統一_ diff格式的雙行標題類似,`/dev/null`用于表示創建或刪除的文件。 4. 修改了塊頭格式以防止人們意外地將其饋送到`patch -p1`。創建組合差異格式用于審查合并提交更改,并不適用于應用。此更改類似于擴展 _索引_ 標頭中的更改: ``` @@@ <from-file-range> <from-file-range> <to-file-range> @@@ ``` 組合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又名“他們的版本”)。 ## 其他差異格式 `--summary`選項描述新添加,刪除,重命名和復制的文件。 `--stat`選項將diffstat(1)圖形添加到輸出。這些選項可以與其他選項結合使用,例如`-p`,用于人類消費。 當顯示涉及重命名或副本的更改時,`--stat`輸出通過組合路徑名的公共前綴和后綴來緊湊地格式化路徑名。例如,修改4行時將`arch/i386/Makefile`移動到`arch/x86/Makefile`的更改將顯示如下: ``` arch/{i386 => x86}/Makefile | 4 +-- ``` `--numstat`選項提供diffstat(1)信息,但設計用于更容易的機器消耗。 `--numstat`輸出中的條目如下所示: ``` 1 2 README 3 1 arch/{i386 => x86}/Makefile ``` 也就是說,從左到右: 1. 添加的行數; 2. tab; 3. 刪除的行數; 4. tab; 5. pathname(可能帶有重命名/復制信息); 6. 換行符。 當`-z`輸出選項生效時,輸出格式為: ``` 1 2 README NUL 3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL ``` 那是: 1. 添加的行數; 2. tab; 3. 刪除的行數; 4. tab; 5. NUL(僅在重命名/復制時存在); 6. 原像中的路徑名; 7. NUL(僅在重命名/復制時存在); 8. 新像中的路徑名(僅在重命名/復制時存在); 9. 一個NUL。 在重命名的情況下,原像路徑之前的額外`NUL`是允許讀取輸出的腳本判斷正在讀取的當前記錄是單路徑記錄還是重命名/復制記錄而無需提前讀取。讀取添加和刪除的行后,讀取`NUL`將產生路徑名,但如果是`NUL`,則記錄將顯示兩個路徑。 ## 例子 ``` Various ways to check your working tree ``` ``` $ git diff (1) $ git diff --cached (2) $ git diff HEAD (3) ``` 1. 尚未為下次提交暫存的工作樹中的更改。 2. 索引與上次提交之間的變化;如果沒有“-a”選項運行“git commit”,你會提交什么。 3. 自上次提交以來工作樹中的更改;如果你運行“git commit -a”,你會提交什么 ``` Comparing with arbitrary commits ``` ``` $ git diff test (1) $ git diff HEAD -- ./test (2) $ git diff HEAD^ HEAD (3) ``` 1. 不是使用當前分支的尖端,而與“測試”分支的尖端進行比較。 2. 不是與“test”分支的尖端進行比較,而與當前分支的尖端進行比較,但將比較限制為文件“test”。 3. 比較上次提交和最后一次提交之前的版本。 ``` Comparing branches ``` ``` $ git diff topic master (1) $ git diff topic..master (2) $ git diff topic...master (3) ``` 1. topic與主分支之間的更改。 2. 與上述相同。 3. 自topic分支啟動以來主分支上發生的更改。 ``` Limiting the diff output ``` ``` $ git diff --diff-filter=MRC (1) $ git diff --name-status (2) $ git diff arch/i386 include/asm-i386 (3) ``` 1. 僅顯示修改,重命名和復制,但不添加或刪除。 2. 僅顯示名稱和更改的性質,但不顯示實際的差異輸出。 3. 將diff輸出限制為命名子樹。 ``` Munging the diff output ``` ``` $ git diff --find-copies-harder -B -C (1) $ git diff -R (2) ``` 1. 花費額外的周期來查找重命名,復制和完成重寫(非常昂貴)。 2. 反向輸出差異。 ## 也可以看看 diff(1), [git-difftool [1]](https://git-scm.com/docs/git-difftool) , [git-log [1]](https://git-scm.com/docs/git-log) , [gitdiffcore [7]](https://git-scm.com/docs/gitdiffcore) , [git-format-patch [1]](https://git-scm.com/docs/git-format-patch) , [git-apply [1]](https://git-scm.com/docs/git-apply) ## 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>

                              哎呀哎呀视频在线观看