?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
git-show - 顯示各種類(lèi)型的對(duì)象
git show [options] <object>…
顯示一個(gè)或多個(gè)對(duì)象(二進(jìn)制大型對(duì)象、樹(shù)、標(biāo)簽和提交)。
對(duì)于提交,它顯示日志消息和文本差異。它還以特殊格式顯示合并提交git diff-tree --cc
。
對(duì)于標(biāo)簽,它顯示標(biāo)簽消息和引用的對(duì)象。
對(duì)于樹(shù),它顯示名稱(chēng)(相當(dāng)于git ls-tree
僅限于 - 名稱(chēng))。
對(duì)于普通的二進(jìn)制大型對(duì)象,它顯示簡(jiǎn)單的內(nèi)容。
該命令使用適用于該git diff-tree
命令的選項(xiàng)來(lái)控制提交引入的更改的顯示方式。
本手冊(cè)頁(yè)僅介紹最常用的選項(xiàng)。
<object>…
要顯示的對(duì)象的名稱(chēng)。有關(guān)拼寫(xiě)對(duì)象名稱(chēng)的更完整列表,請(qǐng)參閱 gitrevisions [7]中的“指定修訂”部分。
--pretty=<format> --format=<format>
在給定的格式漂亮地打?。≒retty-print)提交日志中的內(nèi)容,在這里<format>
可以是一個(gè)oneline
,short
,medium
,full
,fuller
,email
,raw
,format:<string>
和tformat:<string>
。當(dāng)<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ì)象名稱(chēng),只顯示部分前綴。非默認(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ì)象名稱(chēng)。這種否定--abbrev-commit
和暗示它的選項(xiàng)如“--oneline”。它也覆蓋log.abbrevCommit
變量。
--oneline
這是一起使用的“--pretty = oneline --abbrev-commit”的縮寫(xiě)。
--encoding=<encoding>
提交對(duì)象在其編碼頭中記錄用于日志消息的編碼;這個(gè)選項(xiàng)可以用來(lái)告訴命令在用戶(hù)首選的編碼中重新編寫(xiě)提交日志消息。對(duì)于非管道命令,默認(rèn)為 UTF-8。請(qǐng)注意,如果一個(gè)對(duì)象聲稱(chēng)被編碼X
并且正在輸出X
,我們將逐字輸出對(duì)象; 這意味著原始提交中的無(wú)效序列可能會(huì)被復(fù)制到輸出中。
--expand-tabs=<n> --expand-tabs --no-expand-tabs
在輸出中顯示日志消息之前,執(zhí)行一個(gè)標(biāo)簽擴(kuò)展(將每個(gè)標(biāo)簽替換為足夠的空格以填充下一個(gè)顯示列的倍數(shù)<n>
)。--expand-tabs
是一種--expand-tabs=8
縮寫(xiě),并且--no-expand-tabs
是一種--expand-tabs=0
的縮寫(xiě),即禁用選項(xiàng)卡擴(kuò)展。
默認(rèn)情況下,突片縮進(jìn)日志消息擴(kuò)展在相當(dāng)格式由4個(gè)空格(即medium
,這是默認(rèn)值,full
和fuller
)。
--notes=<treeish>
在顯示提交日志消息時(shí),顯示注釋提交的注釋?zhuān)ㄕ?qǐng)參閱 git-notes [1])。這是默認(rèn)的git log
,git show
和git whatchanged
命令,當(dāng)沒(méi)有--pretty
,--format
或者--oneline
在命令行上給出的選項(xiàng)的時(shí)候。
默認(rèn)情況下,顯示的注釋來(lái)自core.notesRef
和notes.displayRef
變量(或相應(yīng)的環(huán)境覆蓋)中列出的注釋 ref 。有關(guān)更多詳細(xì)信息,請(qǐng)參閱 git-config [1]。
使用可選<treeish>
參數(shù),使用樹(shù)狀圖來(lái)查找要顯示的注釋。當(dāng)它開(kāi)始時(shí),樹(shù)木可以指定完整的 refname refs/notes/
; 當(dāng)它開(kāi)始時(shí)notes/
,refs/
亦或是refs/notes/
以前綴形成 ref 的全名。
多個(gè) - 注釋選項(xiàng)可以結(jié)合使用來(lái)控制顯示哪些筆記。例如:“--notes = foo”將只顯示“refs / notes / foo”中的注釋; “--notes = foo --notes”將顯示來(lái)自“refs / notes / foo”和默認(rèn)注釋 ref(s)的兩個(gè)注釋。
--no-notes
不要顯示注釋。這會(huì)取消上述--notes
選項(xiàng),方法是重置從中顯示注釋的注釋列表。選項(xiàng)按照命令行給出的順序進(jìn)行解析,因此,例如“--notes --notes = foo --no-notes --notes = bar”將僅顯示“refs / notes / bar”中的注釋。
--show-notes=<treeish> --no-standard-notes
這些選項(xiàng)已被棄用。改為使用上面的 - 注釋/ - 無(wú)備注選項(xiàng)。
--show-signature
通過(guò)簽名傳遞gpg --verify
并顯示輸出來(lái)檢查簽名提交對(duì)象的有效性。
如果提交是合并,并且不是美觀格式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> <標(biāo)題行>設(shè)計(jì)得盡可能緊湊。
short
commit <sha1> Author: <author>
<title line>
medium
commit <sha1> Author: <author> Date: <author date><title line><full commit message>
full
commit <sha1> Author: <author> Commit: <committer>
<title line>
<full commit message>
fuller
commit <sha1> Author: <author> AuthorDate: <author date> Commit: <committer> CommitDate: <committer date><title line><full commit message>
email
From <sha1> <date> From: <author> Date: <author date> Subject: PATCH <title line>
<full commit message>
raw
raw
格式示出了整個(gè)提交完全一樣存儲(chǔ)在 commit 對(duì)象。值得注意的是,無(wú)論使用--abbrev 還是--no-abbrev,SHA-1 都會(huì)全部顯示,并且parents
信息會(huì)顯示真正的父提交,而不會(huì)考慮移植或簡(jiǎn)化歷史記錄。請(qǐng)注意,這種格式會(huì)影響提交顯示的方式,但不會(huì)影響比較顯示的方式git log --raw
。要以原始差異格式獲取完整對(duì)象名稱(chēng),請(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ì)顯示這樣的事情:
fe6e0ee 的作者 是Junio C Hamano,23小時(shí)前標(biāo)題是>> t4119:test 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)- `%N`: commit notes
- `%GG`: raw verification message from GPG for a signed commit- `%G?`: show "G" for a good (valid) signature, "B" for a bad signature, "U" for a good signature with unknown validity, "X" for a good signature that has expired, "Y" for a good signature made by an expired key, "R" for a good signature made by a revoked key, "E" if the signature cannot be checked (e.g. missing key) and "N" for no signature
- `%GS`: show the name of the signer for a signed commit- `%GK`: show the key used to sign a signed commit
- `%gD`: reflog selector, e.g., `refs/stash@{1}` or `refs/stash@{2 minutes ago`}; the format follows the rules described for the `-g` option. The portion before the `@` is the refname as given on the command line (so `git log -g refs/heads/master` would yield `refs/heads/master@{0}`).- `%gd`: shortened reflog selector; same as `%gD`, but the refname portion is shortened for human readability (so `refs/heads/master` becomes just `master`).
- `%gn`: reflog identity name- `%gN`: reflog identity name (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%ge`: reflog identity email- `%gE`: reflog identity email (respecting .mailmap, see [git-shortlog[1]](git-shortlog) or [git-blame[1]](git-blame))
- `%gs`: reflog subject- `%Cred`: switch color to red
- `%Cgreen`: switch color to green- `%Cblue`: switch color to blue
- `%Creset`: reset color- `%C(…)`: color specification, as described under Values in the "CONFIGURATION FILE" section of [git-config[1]](git-config). By default, colors are shown only when enabled for log output (by `color.diff`, `color.ui`, or `--color`, and respecting the `auto` settings of the former if we are going to a terminal). `%C(auto,...)` is accepted as a historical synonym for the default (e.g., `%C(auto,red)`). Specifying `%C(always,...) will show the colors even when color is not otherwise enabled (though consider just using `--color=always` to enable color for the whole output, including this format and anything else git might color). `auto` alone (i.e. `%C(auto)`) will turn on auto coloring on the next placeholders until the color is switched again.
- `%m`: left (`<`), right (`>`) or boundary (`-`) mark- `%n`: newline
- `%%`: a raw `%`- `%x00`: print a byte from a hex code
- `%w([<w>[,<i1>[,<i2>]]])`: switch line wrapping, like the -w option of [git-shortlog[1]](git-shortlog).- `%<(<N>[,trunc|ltrunc|mtrunc])`: make the next placeholder take at least N columns, padding spaces on the right if necessary. Optionally truncate at the beginning (ltrunc), the middle (mtrunc) or the end (trunc) if the output is longer than N columns. Note that truncating only works correctly with N >= 2.
- `%<|(<N>)`: make the next placeholder take at least until Nth columns, padding spaces on the right if necessary- `%>(<N>)`, `%>|(<N>)`: similar to `%<(<N>)`, `%<|(<N>)` respectively, but padding spaces on the left
- `%>>(<N>)`, `%>>|(<N>)`: similar to `%>(<N>)`, `%>|(<N>)` respectively, except that if the next placeholder takes more spaces than given and there are spaces on its left, use those spaces- `%><(<N>)`, `%><|(<N>)`: similar to `% <(<N>)`, `%<|(<N>)` respectively, but padding both sides (i.e. the text is centered)
- %(trailers): display the trailers of the body as interpreted by [git-interpret-trailers[1]](git-interpret-trailers)NoteSome placeholders may depend on other options given to the revision traversal engine. For example, the %g* reflog options will insert an empty string unless we are traversing reflog entries (e.g., by git log -g). The %d and %D placeholders will use the "short" decoration format if --decorate was not already provided on the command line.If you add a + (plus sign) after % of a placeholder, a line-feed is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.If you add a - (minus sign) after % of a placeholder, all consecutive line-feeds immediately preceding the expansion are deleted if and only if the placeholder expands to an empty string.If you add a (space) after % of a placeholder, a space is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.tformat:
tformat:
格式的操作完全相同format:
,不同之處在于它提供了“終結(jié)者”的語(yǔ)義,而不是“分隔符”的語(yǔ)義。換句話說(shuō),每個(gè)提交都附加了消息結(jié)束符(通常是一個(gè)換行符),而不是放置在條目之間的分隔符。這意味著單行格式的最終條目將以新的行正確終止,就像“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
另外,任何無(wú)法識(shí)別的字符串%
都會(huì)被解釋為在tformat:
前面。例如,這兩個(gè)是等價(jià)的:
$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
-p -u --patch
生成補(bǔ)?。ㄕ?qǐng)參閱生成補(bǔ)丁一節(jié))。
-s --no-patch
抑制差異輸出。對(duì)于像git show
這樣的命令很有用,默認(rèn)顯示補(bǔ)丁,或者取消效果--patch
。
-U<n> --unified=<n>
使用<n>行上下文生成差異,而不是通常的三行。意味著-p
。
--raw
對(duì)于每個(gè)提交,使用原始 diff格 式顯示更改的摘要。請(qǐng)參閱 git-diff [1]的“RAW OUTPUT FORMAT”部分。這與以原始格式顯示日志本身不同,您可以使用它--format=raw
。
--patch-with-raw
-p --raw
的同義詞。
--indent-heuristic --no-indent-heuristic
這些是為了幫助調(diào)試和調(diào)整實(shí)驗(yàn)啟發(fā)式(默認(rèn)情況下是關(guān)閉的),這些啟發(fā)式技術(shù)改變了差異邊界以使修補(bǔ)程序更易于閱讀。
--minimal
花費(fèi)額外的時(shí)間來(lái)確保生成最小可能的差異。
--patience
使用“耐心差異”算法生成差異。
--histogram
使用“直方圖差異”算法生成差異。
--diff-algorithm={patience|minimal|histogram|myers}
選擇一種差異算法。變體如下:
default
, myers
基本的貪婪的 diff 算法。目前,這是默認(rèn)設(shè)置。
minimal
花費(fèi)額外的時(shí)間來(lái)確保生成最小可能的差異。
patience
生成補(bǔ)丁時(shí)使用“耐心差異”算法。
histogram
該算法將耐心算法擴(kuò)展為“支持低出現(xiàn)率的通用元素”。
例如,如果將 diff.algorithm 變量配置為非默認(rèn)值并希望使用默認(rèn)值,則必須使用--diff-algorithm=default
選項(xiàng)。
--stat[=<width>[,<name-width>,<count>]]
生成一個(gè) diffstat。默認(rèn)情況下,文件名部分使用盡可能多的空間,其余部分使用圖形部分。最大寬度默認(rèn)為終端寬度,如果未連接到終端,則最大寬度為80列,并且可以被覆蓋<width>
。文件名部分的寬度可以通過(guò)<name-width>
逗號(hào)后面的另一個(gè)寬度來(lái)限制。圖形部分的寬度可以通過(guò)使用--stat-graph-width=<width>
(影響所有生成統(tǒng)計(jì)圖的命令)或通過(guò)設(shè)置diff.statGraphWidth=<width>
(不影響git format-patch
)來(lái)限制。通過(guò)給出第三個(gè)參數(shù)<count>
,可以將輸出限制在第一<count>
行,緊接著...(
如果還有更多的話)。
這些參數(shù)也可以單獨(dú)設(shè)置--stat-width=<width>
,--stat-name-width=<name-width>
和--stat-count=<count>
。
--numstat
類(lèi)似于--stat
,但顯示十進(jìn)制表示法中添加和刪除的行數(shù)以及不帶縮寫(xiě)的路徑名,以使其更加機(jī)器友好。對(duì)于二進(jìn)制文件,輸出兩個(gè)-
而不是說(shuō)0 0
。
--shortstat
只輸出包含修改文件總數(shù)的格式--stat
的最后一行,以及添加和刪除行的數(shù)量。
--dirstat=<param1,param2,…>
輸出每個(gè)子目錄的相對(duì)變化量分布??梢酝ㄟ^(guò)傳遞一個(gè)用逗號(hào)分隔的參數(shù)列表來(lái)定制--dirstat
行為。默認(rèn)值由diff.dirstat
配置變量控制(請(qǐng)參 閱git-config [1])。以下參數(shù)可用:
changes
通過(guò)計(jì)算已從源中刪除或添加到目標(biāo)的行來(lái)計(jì)算 dirstat 數(shù)字。這會(huì)忽略文件中純代碼移動(dòng)的數(shù)量。換句話說(shuō),重新排列文件中的行數(shù)不會(huì)與其他更改一樣多。這是沒(méi)有給出參數(shù)時(shí)的默認(rèn)行為。
lines
通過(guò)執(zhí)行常規(guī)基于行的差異分析來(lái)計(jì)算 dirstat 數(shù)字,并且將移除/添加的行數(shù)相加。(對(duì)于二進(jìn)制文件,取而代之的是計(jì)算64字節(jié)的塊,因?yàn)槎M(jìn)制文件沒(méi)有自然的行概念)。這是一種--dirstat
比changes
行為更為昂貴的行為,但它可以像其他更改一樣對(duì)文件中的重新排列的行進(jìn)行計(jì)數(shù)。結(jié)果輸出與您從其他--*stat
選項(xiàng)中獲得的結(jié)果一致。
files
通過(guò)計(jì)算更改的文件數(shù)量來(lái)計(jì)算 dirstat 數(shù)字。在dirstat 分析中每個(gè)更改的文件都相同。這是計(jì)算上最便宜的--dirstat
行為,因?yàn)樗静恍枰榭次募?nèi)容。
cumulative
計(jì)數(shù)父目錄的子目錄中的更改。請(qǐng)注意,使用時(shí)cumulative
,報(bào)告的百分比總和可能超過(guò)100%。默認(rèn)(非累積)行為可以用noncumulative
參數(shù)指定。
<limit>
整數(shù)參數(shù)指定截?cái)喟俜直龋J(rèn)為3%)。輸出中不顯示貢獻(xiàn)小于此百分比的目錄。
示例:以下內(nèi)容將計(jì)數(shù)已更改的文件,同時(shí)忽略占已更改文件總數(shù)少于10%的目錄,并累積父目錄中的子目錄計(jì)數(shù):--dirstat=files,10,cumulative
。
--summary
輸出擴(kuò)展頭信息的精簡(jiǎn)摘要,如創(chuàng)建、重命名和模式更改。
--patch-with-stat
-p --stat=
的同義詞。
-z
用 NUL 分開(kāi)提交,而不用新的換行符。
此外,當(dāng)--raw
或--numstat
已經(jīng)被給出的時(shí)候,請(qǐng)勿使用路徑名并將 NUL 用作輸出字段終止符。
如果沒(méi)有這個(gè)選項(xiàng),帶有“不尋?!弊址穆窂矫麑凑张渲米兞?code>core.quotePath的說(shuō)明引用(請(qǐng)參閱 git-config [1])。
--name-only
僅顯示已更改文件的名稱(chēng)。
--name-status
僅顯示已更改文件的名稱(chēng)和狀態(tài)。有關(guān)--diff-filter
狀態(tài)字母的含義,請(qǐng)參閱選項(xiàng)說(shuō)明。
--submodule=<format>
指定如何顯示子模塊中的差異。指定使用--submodule=short
的short
格式時(shí)。這種格式只顯示范圍開(kāi)始和結(jié)束處的提交名稱(chēng)。當(dāng)--submodule
或者--submodule=log
被指定時(shí),使用log
格式。這種格式列出了像 git-submodule [1] summary
那樣的提交。當(dāng)--submodule=diff
指定時(shí),使用diff
格式。這種格式顯示了提交范圍內(nèi)子模塊內(nèi)容變化的內(nèi)聯(lián)比較。如果配置選項(xiàng)未設(shè)置,則默認(rèn)為diff.submodule
或short
格式。
--color=<when>
顯示有色差異。--color
(即沒(méi)有=<when>
)是一樣的--color=always
。<when>
可以是一個(gè)always
,never
或auto
。
--no-color
關(guān)閉有色差異。它和--color=never
。一樣。
--word-diff=<mode>
顯示一個(gè)單詞diff,使用<mode>分隔已更改的單詞。默認(rèn)情況下,單詞由空格分隔; 見(jiàn)--word-diff-regex
下文。<mode>默認(rèn)為plain
,并且必須是以下之一:
color
僅使用顏色突出顯示更改的詞。意味著--color
。
plain
將單詞顯示為[-removed-]
和{+added+}
。如果輸入中出現(xiàn)分隔符,則不會(huì)嘗試跳過(guò)分隔符,因此輸出可能不明確。
porcelain
使用專(zhuān)門(mén)用于腳本消費(fèi)量的基于行的格式。以通常的統(tǒng)一差異格式打印已添加/已刪除/未更改的運(yùn)行,以行開(kāi)始處的+
/ -
/字符開(kāi)始并延伸至行尾。輸入中~
的換行符通過(guò)它自己的一行代字符表示。
none
再次禁用字差異。
請(qǐng)注意,盡管第一個(gè)模式的名稱(chēng),如果啟用,顏色將用于突出顯示所有模式中更改的部分。
--word-diff-regex=<regex>
使用<regex>來(lái)決定一個(gè)單詞是什么,而不是將非空白的運(yùn)行視為一個(gè)單詞。也意味著--word-diff
除非已經(jīng)啟用。
每個(gè)<regex>的非重疊匹配都被視為一個(gè)單詞。為了找到差異,這些匹配之間的任何內(nèi)容都被認(rèn)為是空白并被忽略(!) 。你可能想追加|[^[:space:]]
到你的正則表達(dá)式,以確保它匹配所有非空白字符。包含換行符的匹配在換行符處被無(wú)提地截?cái)?!)。
例如,--word-diff-regex=.
將每個(gè)字符看作單詞,并相應(yīng)地逐個(gè)字符地顯示差異。
正則表達(dá)式也可以通過(guò) diff 驅(qū)動(dòng)程序或配置選項(xiàng)來(lái)設(shè)置,請(qǐng)參閱 gitattributes [5]或git-config [1]。顯式給予它將覆蓋任何 diff 驅(qū)動(dòng)程序或配置設(shè)置。差異驅(qū)動(dòng)程序覆蓋配置設(shè)置
--color-words=<regex>
相當(dāng)于--word-diff=color
加(如果指定了正則表達(dá)式)--word-diff-regex=<regex>
。
--no-renames
關(guān)閉重命名檢測(cè),即使配置文件提供了默認(rèn)設(shè)置。
--check
警告如果更改引入沖突標(biāo)記或空白錯(cuò)誤。認(rèn)為空白錯(cuò)誤是由core.whitespace
配置控制的。默認(rèn)情況下,尾隨空格(包括單獨(dú)由空格組成的行)和空格字符(緊跟該行的初始縮進(jìn)內(nèi)的制表符后面的空格字符)將被視為空白錯(cuò)誤。如果發(fā)現(xiàn)問(wèn)題,則退出非零狀態(tài)。與--exit-code 不兼容。
--ws-error-highlight=<kind>
在context
、old
或new
差異線中突出顯示空白的錯(cuò)誤。多個(gè)值以逗號(hào)分隔,none
重置以前的值,default
將列表重置為new
和all
簡(jiǎn)寫(xiě)為old,new,context
。如果未給出此選項(xiàng),并且diff.wsErrorHighlight
未設(shè)置配置變量,則只會(huì)突出顯示new
行中的空白錯(cuò)誤。空白錯(cuò)誤是彩色的color.diff.whitespace
。
--full-index
在生成補(bǔ)丁格式輸出時(shí),在“索引”行上顯示完整的映像前和映像后blob對(duì)象名稱(chēng),而不是第一批字符。
--binary
除了--full-index
,輸出一個(gè)可以應(yīng)用git-apply
的二進(jìn)制差異。
--abbrev=<n>
代替在 diff-raw 格式輸出和 diff-tree 標(biāo)題行中顯示完整的40字節(jié)十六進(jìn)制對(duì)象名稱(chēng),只顯示部分前綴。這與--full-index
上面的選項(xiàng)無(wú)關(guān),后者控制 diff-patch輸出格式。非默認(rèn)的位數(shù)可以用指定--abbrev=<n>
。
-B<n> --break-rewrites[=<n>]
將完全重寫(xiě)更改分解為刪除和創(chuàng)建對(duì)。這有兩個(gè)目的:
它影響到一種改變的方式,這種改變相當(dāng)于整個(gè)文件的重寫(xiě),而不是像一系列刪除和插入混合在一起,只有幾行文字與上下文相匹配,而是作為舊的一切的一次刪除,單次插入所有新事物,并且數(shù)字m
控制-B 選項(xiàng)的這個(gè)方面(默認(rèn)為60%)。-B/70%
指定只有少于30%的原始數(shù)據(jù)應(yīng)保留在 Git 的結(jié)果中,以便將其視為全部重寫(xiě)(否則結(jié)果補(bǔ)丁將是一系列與上下文行混合的刪除和插入)。
與-M 一起使用時(shí),完全重寫(xiě)的文件也被認(rèn)為是重命名的來(lái)源(通常-M僅考慮作為重命名源消失的文件),并且該數(shù)字n
控制著-B 選項(xiàng)的這個(gè)方面(默認(rèn)為50%)。-B20%
指定添加和刪除相對(duì)于文件大小的20%或更多的更改有資格作為可能的重命名源到另一個(gè)文件。
-M<n> --find-renames=<n>
如果生成差異,則檢測(cè)并報(bào)告每次提交的重命名。在遍歷歷史記錄時(shí)跨越重命名后續(xù)文件,請(qǐng)參閱--follow
。如果n
被指定,則它是相似度指數(shù)的閾值(即與文件大小相比的添加/刪除量)。例如,-M90%
如果超過(guò)90%的文件沒(méi)有改變,Git應(yīng)該考慮刪除/添加對(duì)是一個(gè)重命名。如果沒(méi)有%
符號(hào),該數(shù)字應(yīng)作為分?jǐn)?shù)讀取,并在其前面加小數(shù)點(diǎn)。即,-M5
變成0.5,并且因此是相同的-M50%
。同樣的,-M05
也是一樣的-M5%
。要將檢測(cè)限制為精確重命名,請(qǐng)使用-M100%
。默認(rèn)相似度指數(shù)為50%。
-C<n> --find-copies=<n>
檢測(cè)副本以及重命名。另見(jiàn)--find-copies-harder
。如果n
被指定,它的含義與-M<n>
一致。
--find-copies-harder
出于性能原因,默認(rèn)情況下,-C
只有當(dāng)副本的原始文件在相同的變更集中被修改時(shí),選項(xiàng)才會(huì)查找副本。該標(biāo)志使命令檢查未修改的文件作為復(fù)制源的候選項(xiàng)。對(duì)于大型項(xiàng)目來(lái)說(shuō),這是一項(xiàng)非常昂貴的操作,因此請(qǐng)謹(jǐn)慎使用。給予多個(gè)-C
選項(xiàng)具有相同的效果。
-D --irreversible-delete
省略原圖像進(jìn)行刪除,即僅打印標(biāo)題,但不打印原像和之間的差異/dev/null
。由此產(chǎn)生的補(bǔ)丁不適用于patch
或git apply
; 這僅適用于那些想專(zhuān)注于更改后查看文本的人。另外,輸出顯然缺乏足夠的信息來(lái)反向應(yīng)用這樣的補(bǔ)丁,甚至是手動(dòng)的,因此也就是選項(xiàng)的名稱(chēng)。
在與-B
刪除/創(chuàng)建對(duì)的刪除部分一起使用時(shí),還要省略原圖。
-l<num>
在-M
和-C
選項(xiàng)需要為 O(n ^ 2)的處理時(shí)間,其中 n 是/復(fù)制目標(biāo)潛在的重命名的數(shù)目。如果重命名/復(fù)制目標(biāo)的數(shù)量超過(guò)指定的數(shù)量,則此選項(xiàng)可防止重命名/復(fù)制檢測(cè)運(yùn)行。
--diff-filter=[(A|C|D|M|R|T|U|X|B)…*]
只選擇已添加(A
),已復(fù)制(C
),已刪除(),已D
修改(M
),已重命名(R
),其類(lèi)型(即常規(guī)文件,符號(hào)鏈接,子模塊,...)已更改(T
),已取消合并(U
)未知(X
)或已配對(duì)的被破壞的(B
)??梢允褂萌魏芜^(guò)濾字符的組合(包括無(wú))。當(dāng)*
(全部或無(wú))添加到組合中時(shí),如果有任何文件與比較中的其他條件匹配,則選擇所有路徑; 如果沒(méi)有與其他標(biāo)準(zhǔn)匹配的文件,則不會(huì)選擇任何內(nèi)容。
此外,這些大寫(xiě)字母可以降低排除。例如--diff-filter=ad
排除添加和刪除的路徑。
-S<string>
查找改變文件中指定字符串出現(xiàn)次數(shù)(即添加/刪除)的差異。旨在供腳本編寫(xiě)者的使用。
當(dāng)你尋找一個(gè)精確的代碼塊(比如一個(gè)結(jié)構(gòu)體)并且想要知道該塊自第一次出現(xiàn)以來(lái)的歷史記錄時(shí),它非常有用:迭代地使用該特征將原始圖像中的有趣塊返回到-S
,并繼續(xù)前進(jìn),直到獲得該塊的第一個(gè)版本。
-G<regex>
尋找補(bǔ)丁文本包含與<regex>匹配的添加/刪除行的差異。
為了說(shuō)明之間-S<regex> --pickaxe-regex
和-G<regex>
的區(qū)別,考慮在同一個(gè)文件中的以下 DIFF 提交:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);...- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
雖然git log -G"regexec\(regexp"
會(huì)顯示此提交,但git log -S"regexec\(regexp" --pickaxe-regex
不會(huì)(因?yàn)樵撟址某霈F(xiàn)次數(shù)沒(méi)有改變)。
有關(guān)pickaxe
更多信息,請(qǐng)參閱 gitdiffcore [7]中的條目。
--pickaxe-all
當(dāng)-S
或-G
發(fā)現(xiàn)更改時(shí),顯示該更改集中的所有更改,而不僅僅是包含<string>中的更改的文件。
--pickaxe-regex
將給定-S
的<string> 視為擴(kuò)展的 POSIX 正則表達(dá)式進(jìn)行匹配。
-O<orderfile>
控制文件在輸出中出現(xiàn)的順序。這覆蓋了diff.orderFile
配置變量(請(qǐng)參閱 git-config [1])。取消diff.orderFile
,使用-O/dev/null
。
輸出順序由<orderfile>中的全局模式順序決定。所有具有與第一個(gè)模式相匹配的路徑名的文件將首先輸出,接下來(lái)將輸出所有具有匹配第二個(gè)模式(但不是第一個(gè))的路徑名的文件,依此類(lèi)推。最后輸出所有不匹配任何模式的路徑名的文件,就好像文件末尾有一個(gè)隱含的匹配模式一樣。如果多個(gè)路徑名具有相同的排名(它們匹配相同的模式但沒(méi)有更早的模式),則它們的輸出順序相對(duì)于彼此是正常順序。
按以下方式解析<orderfile>:
空白行被忽略,所以它們可以用作分隔符以提高可讀性。
以散列(“ #
”)開(kāi)頭的行會(huì)被忽略,因此它們可以用于注釋。如果以散列開(kāi)頭,則在模式的開(kāi)頭添加反斜杠(“ \
”)。
每個(gè)其他行都包含一個(gè) pattern.atterns 與沒(méi)有 FNM_PATHNAME 標(biāo)志的
fnmantch(3)使用的模式具有相同的語(yǔ)法和語(yǔ)義,除非路徑名也匹配模式,如果刪除任何數(shù)量的最終路徑名組件都與該模式匹配。例如,模式“ foo*bar
”匹配“ fooasdfbar
”和“ foo/bar/baz/asdf
”但不是“foobarx
即使一行有空白,而另一行沒(méi)有空白,這也會(huì)忽略差異。--ignore-blank-lines忽略其行全部空白的更改。--inter-hunk-context = <lines>在 diff hunk 之間顯示上下文,直到指定的行數(shù),從而融合彼此接近的hunk。默認(rèn)為diff.interHunkContext
如果配置選項(xiàng)未設(shè)置,則為0。-W --function-context 顯示更改的整個(gè)周?chē)δ堋?-ext-diff 允許執(zhí)行一個(gè)外部diff助手。如果你用 gitattributes [5]設(shè)置外部差異驅(qū)動(dòng)程序,你需要在 git-log [1]和朋友中使用這個(gè)選項(xiàng)。--no-ext-diff 禁止外部 diff 驅(qū)動(dòng)程序。--textconv --no-textconv 允許(或不允許)在比較二進(jìn)制文件時(shí)運(yùn)行外部文本轉(zhuǎn)換過(guò)濾器。有關(guān)詳細(xì)信息,請(qǐng)參閱gitattributes [5]。由于 textconv過(guò)濾器通常是單向轉(zhuǎn)換,因此生成的差異適合人類(lèi)消費(fèi),但無(wú)法應(yīng)用。出于這個(gè)原因,默認(rèn)情況下,textconv 過(guò)濾器僅針對(duì) git-diff [1]和 git-log [1]啟用,但不適用于 git-format-patch [1]或 diff plumbing命令。 - 忽略子模塊= <時(shí)> 忽略差異代中子模塊的更改。<when>可以是“none”,“untracked”,“dirty”或“all”,這是默認(rèn)設(shè)置。如果子模塊包含未跟蹤或已修改的文件,或者HEAD與超級(jí)項(xiàng)目中記錄的提交不同,并且可用于覆蓋ignore
選項(xiàng)在 git-config [1]或 gitmodules [5]中。當(dāng)使用“未跟蹤”時(shí),如果子模塊僅包含未跟蹤內(nèi)容(但仍然針對(duì)修改內(nèi)容進(jìn)行掃描),則子模塊不會(huì)被視為臟。使用“dirty”會(huì)忽略對(duì)子模塊工作樹(shù)的所有更改,只會(huì)顯示超級(jí)項(xiàng)目中存儲(chǔ)的提交更改(這是1.7.0之前的行為)。使用“all”隱藏對(duì)子模塊的所有更改。--src-prefix = <prefix>顯示給定的源前綴而不是“a /”。--dst-prefix = <prefix>顯示給定的目標(biāo)前綴而不是“b /”。--no-prefix不顯示任何源或目標(biāo)前綴。--line-prefix = <prefix>為每行輸出添加一個(gè)附加前綴。--ita -in-in-index默認(rèn)條目由“git add -N”添加 在“git diff”中顯示為現(xiàn)有的空文件,在“git diff --cached”中顯示為新文件。這個(gè)選項(xiàng)使條目在“git diff”中顯示為新文件,在“git diff --cached”中不存在。這個(gè)選項(xiàng)可以恢復(fù)--ita-visible-in-index
。這兩個(gè)選項(xiàng)都是實(shí)驗(yàn)性的,可以在將來(lái)刪除。有關(guān)這些常用選項(xiàng)的更多詳細(xì)說(shuō)明,另請(qǐng)參閱gitdiffcore [7]。使用-p生成補(bǔ)丁當(dāng)“git-diff-index”,“git-diff-tree”或“ git-diff-files“是用一個(gè)-p
選項(xiàng)運(yùn)行的,”git diff“沒(méi)有--raw
選項(xiàng),或者”git log“用”-p“選項(xiàng)運(yùn)行,它們不會(huì)產(chǎn)生上面描述的輸出; 相反,他們生成一個(gè)補(bǔ)丁文件。您可以通過(guò)GIT_EXTERNAL_DIFF
和GIT_DIFF_OPTS
環(huán)境變量自定義這些修補(bǔ)程序的創(chuàng)建。-p選項(xiàng)生成的內(nèi)容與傳統(tǒng)的 diff 格式略有不同:
它前面有一個(gè)“git diff”header,看起來(lái)像這樣:
diff --git a/file1 b/file2
在a/
和b/
文件名是,除非重命名/副本所涉及的相同。尤其是,即使是創(chuàng)建或刪除,/dev/null
也可not
用于替換文件名a/
或b/
文件名。
當(dāng)重命名/復(fù)制參與,file1
并file2
示出了重命名/復(fù)制的源文件的名稱(chēng)和重命名/復(fù)制分別產(chǎn)生,該文件的名稱(chēng)。
它后跟一個(gè)或多個(gè)擴(kuò)展標(biāo)題行:舊模式<mode>新模式<mode>已刪除文件模式<mode>新文件模式<mode>從<path>復(fù)制到<path>從<path>重命名重命名為<path>相似索引<number>不相似索引<number>索引<hash> .. <hash> <mode>文件模式打印為6位八進(jìn)制數(shù)字,包括文件類(lèi)型和文件權(quán)限位。擴(kuò)展頭中的路徑名不包含a/
和b/
前綴。相似性指數(shù)是未改變的行的百分比,不相似性指數(shù)是改變的行的百分比。它是一個(gè)向下舍入的整數(shù),后面跟著一個(gè)百分號(hào)。100%的相似性指數(shù)值因此保留給兩個(gè)相同的文件,而100%相異性意味著來(lái)自舊文件的任何行都不會(huì)將其轉(zhuǎn)換為新的文件。索引行包含更改前后的 SHA-1校驗(yàn)和。如果文件模式?jīng)]有改變,則包含<mode>; 否則,單獨(dú)的行表示舊模式和新模式。
帶有“不常用”字符的路徑名將按照配置變量的說(shuō)明引用core.quotePath
(請(qǐng)參閱 git-config [1])。
file1
輸出中的所有文件在提交之前引用文件,所有file2
文件在提交之后引用文件。將每個(gè)更改順序應(yīng)用于每個(gè)文件是不正確的。例如,這個(gè)補(bǔ)丁會(huì)將 a 和 b :diff --git a / ab / b 重命名為 a 重命名為 b diff --git a / bb / a 重命名為 b 重命名為 aCombined diff formatAny diff-generating 命令可以將-c
或者顯示合并時(shí)--cc
產(chǎn)生一個(gè)選項(xiàng)combined diff
。這是顯示與 git-diff [1]或 git-show [1]合并時(shí)的默認(rèn)格式。另請(qǐng)注意,您可以-m
選擇這些命令中的任何一個(gè)來(lái)強(qiáng)制生成合并的單個(gè)父代的差異combined 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);
它前面有一個(gè)“git diff”頭,看起來(lái)像這樣(當(dāng)使用-c
選項(xiàng)時(shí)):
差異組合文件
或者像這樣(當(dāng)使用--cc
選項(xiàng)時(shí)):
diff --cc file
它后面跟著一個(gè)或多個(gè)擴(kuò)展標(biāo)題行(此示例顯示與兩個(gè)父級(jí)合并):
index <hash>,<hash> .. <hash> mode <mode>,<mode> .. <mode>新文件模式<mode>已刪除的文件模式<mode>,<mode> mode <mode>,<mode>..<mode>
只有當(dāng)至少有一個(gè)<mode>與其余部分不同時(shí),該行才會(huì)出現(xiàn)。具有關(guān)于檢測(cè)到的內(nèi)容移動(dòng)(重命名和復(fù)制檢測(cè))的信息的擴(kuò)展標(biāo)題被設(shè)計(jì)為與兩個(gè)<tree-ish>的差異一起工作,并且不被組合的差異格式使用。
緊接著是兩行文件/文件頭
--- a/file +++ b/file
類(lèi)似于傳統(tǒng)unified
差異格式的雙行標(biāo)題,/dev/null
用于表示創(chuàng)建或刪除的文件。
塊頭格式被修改以防止人們意外地將其提供給patch -p1
。組合的差異格式是為了審查合并提交更改而創(chuàng)建的,并不適用于應(yīng)用。這個(gè)改變類(lèi)似于擴(kuò)展index
頭中的改變:@@@ <從文件范圍到<從文件范圍到<到文件范圍> @@@有(父數(shù)+ 1)個(gè)@
字符不同于傳統(tǒng)的unified
diff格式,它顯示兩個(gè)文件A和B,其中有一列-
(減號(hào) - 出現(xiàn)在A中,但在B中刪除),+
(加 - 在A中丟失,但添加到B中) , 要么" "
(空格不變)前綴,此格式將兩個(gè)或多個(gè)文件file1,file2,...與一個(gè)文件X進(jìn)行比較,并顯示X與每個(gè)fileN的區(qū)別。每個(gè)fileN的一列都被預(yù)置在輸出行中,以指出X的行與其不同。-
列N中的一個(gè)字符表示該行出現(xiàn)在fileN 中,但它不出現(xiàn)在結(jié)果中。+
N列中的一個(gè)字符表示該行出現(xiàn)在結(jié)果中,并且fileN沒(méi)有該行(換句話說(shuō),從該父母的視角添加該行)。在上面的示例輸出中,函數(shù)簽名從兩個(gè)文件中更改(因此-
從file1和file2中刪除了兩個(gè)刪除,另外還有兩個(gè)刪除++
意味著添加的一行不會(huì)出現(xiàn)在file1或file2中)。另外還有八行與file1相同,但不會(huì)出現(xiàn)在file2中(因此前綴為+
)。當(dāng)顯示時(shí)git diff-tree -c
,它將合并提交的父項(xiàng)與合并結(jié)果(即file1..fileN是父項(xiàng))進(jìn)行比較。如圖所示git diff-files -c
,它將兩個(gè)未解決的合并父代與正在工作的樹(shù)文件進(jìn)行比較(即file1是第二階段aka“我們的版本”,file2是第三階段aka“他們的版本”)。示例 git show v1.0.0
顯示標(biāo)記v1.0.0
以及標(biāo)記指向。 git show v1.0.0^{tree}
顯示標(biāo)簽指向的樹(shù)v1.0.0
。 git show -s --format=%s v1.0.0^{commit}
顯示標(biāo)簽指向的提交主題v1.0.0
。 git show next~10:Documentation/README
顯示文件的內(nèi)容Documentation/README
因?yàn)樗麄兪窃摲种ё詈笠淮纬兄Z的第10次next
。 git show master:Makefile master:t/Makefile
將分支頭部中的所述Makefiles的內(nèi)容連接master
在一起.DiscussionGit在某種程度上是字符編碼不可知的。
blob對(duì)象的內(nèi)容是未解釋的字節(jié)序列。在核心層面沒(méi)有編碼翻譯。
路徑名以 UTF-8標(biāo)準(zhǔn)化形式C編碼。這適用于樹(shù)對(duì)象,索引文件,ref 名稱(chēng),以及命令行參數(shù),環(huán)境變量和配置文件中的路徑名.git/config
(請(qǐng)參閱 git-config [1]) ,gitignore [5],gitattributes [5]和gitmodules [5])。請(qǐng)注意,核心級(jí)Git將路徑名視為非NUL字節(jié)序列,不存在路徑名編碼轉(zhuǎn)換(Mac和Windows除外)。因此,即使在使用傳統(tǒng)擴(kuò)展 ASCII 編碼的平臺(tái)和文件系統(tǒng)上,使用非 ASCII 路徑名也可以工作。但是,在這些系統(tǒng)上創(chuàng)建的存儲(chǔ)庫(kù)在基于 UTF-8的系統(tǒng)(例如 Linux,Mac,Windows)上無(wú)法正常工作,反之亦然。此外,許多基 于Git 的工具只是假設(shè)路徑名稱(chēng)為 UTF-8,并且無(wú)法正確顯示其他編碼。
提交日志消息通常以 UTF-8編碼,但也支持其他擴(kuò)展 ASCII 編碼。這包括 ISO-8859-x,CP125x 和許多其他版本,但not
UTF-16/32,EBCDIC和CJK 多字節(jié)編碼(GBK,Shift-JIS,Big5,EUC-x,CP9xx 等)。
雖然我們鼓勵(lì)提交日志消息使用UTF-8編碼,但核心和Git瓷器都設(shè)計(jì)為不強(qiáng)制項(xiàng)目使用UTF-8。如果特定項(xiàng)目的所有參與者發(fā)現(xiàn)使用遺留編碼更方便,Git不會(huì)禁止它。但是,有幾件事要牢記。
git commit
和git commit-tree
如果提交給它的提交日志消息看起來(lái)不像一個(gè)有效的 UTF-8 字符串,則會(huì)發(fā)出警告,除非您明確聲明您的項(xiàng)目使用了舊版編碼。這樣說(shuō)的方式是在.git/config
文件中使用 i18n.commitencoding ,如下所示:
i18n commitEncoding = ISO-8859-1Commit 用上述設(shè)置創(chuàng)建的對(duì)象記錄i18n.commitEncoding
其encoding
標(biāo)頭中的值。這是為了幫助稍后看到他們的其他人。缺少這個(gè)頭部意味著提交日志消息以UTF-8編碼。
git log
,git show
,git blame
和朋友看encoding
一個(gè)提交對(duì)象的報(bào)頭,并且嘗試除非另有規(guī)定重新代碼日志消息轉(zhuǎn)換成 UTF-8。您可以i18n.logOutputEncoding
在.git/config
文件中指定所需的輸出編碼,如下所示:
i18n logOutputEncoding = ISO-8859-1
如果您沒(méi)有此配置變量,i18n.commitEncoding
則會(huì)使用該值。
請(qǐng)注意,在提交對(duì)象級(jí)別強(qiáng)制使用 UTF-8時(shí),我們故意選擇不重新編寫(xiě)提交日志消息,因?yàn)橹匦戮幋a為 UTF-8不一定是可逆操作。