?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
git-show-ref - 在本地存儲(chǔ)庫(kù)中列出引用
后綴為@
帶括號(hào)的后綴(例如{1}
,{15}
)指定了該ref的第n個(gè)前置值。例如master@{1}
,master
while master@{5}
是第5個(gè)先前值的即時(shí)先驗(yàn)值master
。該后綴只能在ref名稱后面使用,并且ref必須具有現(xiàn)有的日志($GIT_DIR/logs/<refname>
)。
git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>…]git show-ref --exclude-existing[=<pattern>]
顯示本地存儲(chǔ)庫(kù)中可用的引用以及關(guān)聯(lián)的提交ID。可以使用模式過(guò)濾結(jié)果,并可以將標(biāo)記解引用到對(duì)象ID中。此外,它可以用來(lái)測(cè)試一個(gè)特定的ref是否存在。
該構(gòu)造@{-<n>}
意味著在當(dāng)前之前檢出的第n個(gè)分支/提交。
--exclude-existing表單是一個(gè)反過(guò)來(lái)的過(guò)濾器。它從stdin中讀取ref,每行一個(gè)ref,并顯示那些不存在于本地存儲(chǔ)庫(kù)中的文件。
鼓勵(lì)使用此實(shí)用程序,以便直接訪問(wèn)目錄下的.git
文件。
@{push}
如果在檢出時(shí)git push
運(yùn)行branchname
(或當(dāng)前HEAD
沒(méi)有指定branchname),后綴將報(bào)告分支“我們將推送到哪里” 。由于我們的推送目標(biāo)位于遠(yuǎn)程存儲(chǔ)庫(kù)中,當(dāng)然,我們會(huì)報(bào)告與該分支對(duì)應(yīng)的本地跟蹤分支(即,某處refs/remotes/
)。
這里有一個(gè)例子可以使它更加清晰:
$ git config push.default current $ git config remote.pushdefault myfork $ git checkout -b mybranch origin/master $ git rev-parse --symbolic-full-name @{upstream}refs/remotes/origin/master $ git rev-parse --symbolic-full-name @{push}refs/remotes/myfork/mybranch
在示例中請(qǐng)注意,我們建立了一個(gè)三角形工作流程,我們從一個(gè)位置拉出并推送到另一個(gè)位置。在非三角形工作流程中,與之@{push}
相同@{upstream}
,并且不需要它。
當(dāng)拼寫成大寫字母時(shí),這個(gè)后綴也是可以接受的,無(wú)論大小寫是什么意思都是相同的。
<rev>^, e.g. HEAD^, v1.5.1^0
^
修訂參數(shù)的后綴表示該提交對(duì)象的第一個(gè)父代。^<n>
意味著第n個(gè)父母(即<rev>^
相當(dāng)于<rev>^1
)。作為一個(gè)特殊規(guī)則,<rev>^0
意味著提交本身,并在<rev>
引用提交對(duì)象的標(biāo)記對(duì)象的對(duì)象名稱時(shí)使用。
<rev>~<n>, e.g. master~3
~<n>
修訂參數(shù)的后綴表示作為指定提交對(duì)象的第n代祖先的提交對(duì)象,僅在第一個(gè)父代之后。即<rev>~3
相當(dāng)于<rev>^^^
哪個(gè)相當(dāng)于<rev>^1^1^1
。請(qǐng)參閱下面的表格來(lái)說(shuō)明此表格的用法。
<rev>^{<type>}, e.g. v0.99.8^{commit}
一個(gè)后綴^
跟在括號(hào)內(nèi)的對(duì)象類型名稱意味著以<rev>
遞歸方式解引用對(duì)象,直到<type>
找到類型的對(duì)象或者對(duì)象不能被解除引用(在這種情況下,barf)。例如,如果<rev>
是commit-ish,則<rev>^{commit}
描述相應(yīng)的提交對(duì)象。同樣,如果<rev>
是樹(shù)型,則<rev>^{tree}
描述相應(yīng)的樹(shù)型對(duì)象。<rev>^0
是短暫的<rev>^{commit}
。
rev^{object}
可以用來(lái)確定rev
存在的對(duì)象的名稱,而不需要rev
作為標(biāo)簽,也不需要解引用rev
; 因?yàn)橐粋€(gè)標(biāo)簽已經(jīng)是一個(gè)對(duì)象,所以即使一次到達(dá)一個(gè)對(duì)象也不需要解除引用。
rev^{tag}
可以用來(lái)確保rev
識(shí)別現(xiàn)有的標(biāo)簽對(duì)象。
<rev>^{}, e.g. v0.99.8^{}
一個(gè)后綴^
跟一個(gè)空括號(hào)對(duì)意味著對(duì)象可以是一個(gè)標(biāo)簽,并遞歸地引用標(biāo)簽,直到找到一個(gè)非標(biāo)簽對(duì)象。
<rev>^{/<text>}, e.g. HEAD^{/fix nasty bug}
后綴^
的修正參數(shù),其次,它包含用斜線為首的文本的一對(duì)括號(hào),是一樣的:/fix nasty bug
下面的語(yǔ)法不同之處在于它返回最年輕的匹配提交其是從可到達(dá)<rev>
之前^
。
:/<text>, e.g. :/fix nasty bug
一個(gè)冒號(hào),后跟一個(gè)斜線,后跟一個(gè)文本,命名提交消息與指定正則表達(dá)式匹配的提交。該名稱返回可從任何ref訪問(wèn)的最年輕匹配提交。正則表達(dá)式可以匹配提交消息的任何部分。要匹配以字符串開(kāi)頭的消息,可以使用例如:/^foo
。特殊序列:/!
保留給修飾符以匹配內(nèi)容。:/!-foo
執(zhí)行否定匹配,同時(shí):/!!foo
匹配文字!
字符,然后匹配foo
。任何以其他序列開(kāi)始的序列:/!
現(xiàn)在都被保留。
<rev>:<path>, e.g. HEAD:README, :README, master:./README
一個(gè)后綴:
后面跟著一個(gè)路徑的名稱是由冒號(hào)前部分命名的tree-ish對(duì)象中給定路徑上的blob或樹(shù)。:path
(在冒號(hào)前有一個(gè)空白部分)是下面描述的語(yǔ)法的特例:記錄在給定路徑索引處的內(nèi)容。以當(dāng)前工作目錄開(kāi)始./
或../
相對(duì)于當(dāng)前工作目錄的路徑。給定的路徑將被轉(zhuǎn)換為相對(duì)于工作樹(shù)的根目錄。這對(duì)于從具有與工作樹(shù)相同樹(shù)結(jié)構(gòu)的提交或樹(shù)來(lái)處理blob或樹(shù)是非常有用的。
:<n>:<path>, e.g. :0:README, :README
一個(gè)冒號(hào),后跟一個(gè)階段號(hào)(0到3)和一個(gè)冒號(hào),后跟一個(gè)路徑,在給定路徑的索引中命名一個(gè)blob對(duì)象。缺少的階段編號(hào)(以及后面的冒號(hào))命名為0階段編號(hào)。在合并期間,階段1是共同的祖先,階段2是目標(biāo)分支的版本(通常是當(dāng)前分支),階段3是來(lái)自正在合并的分支的版本。
以下是Jon Loeliger的插圖。提交節(jié)點(diǎn)B和C都是提交節(jié)點(diǎn)A的父節(jié)點(diǎn)。父提交按從左到右的順序排列。
G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / \ / A
A = = A^0B = A^ = A^1 = A~1C = A^2 = A^2D = A^^ = A^1^1 = A~2E = B^2 = A^^2F = B^3 = A^^3G = A^^^ = A^1^1^1 = A~3H = D^2 = B^^2 = A^^^2 = A~2^2I = F^ = B^3^ = A^^3^J = F^2 = B^3^2 = A^^3^2
歷史遍歷命令,例如git log
對(duì)一組提交進(jìn)行操作,而不僅僅是一次提交。
對(duì)于這些命令,使用上一節(jié)中描述的符號(hào)來(lái)指定單個(gè)修訂,意味著reachable
來(lái)自給定提交的一組提交。
提交的可達(dá)集是提交本身和祖先鏈中的提交。
^<rev> (caret) Notation
要排除提交可達(dá)的提交,使用前綴^
符號(hào)。例如,^r1 r2
意味著提交可達(dá),r2
但不包括從r1
(即r1
其祖先)可達(dá)的。
The .. (two-dot) Range Notation
該^r1 r2
組操作似乎經(jīng)常有它的簡(jiǎn)寫。當(dāng)你有兩個(gè)提交r1
并且r2
(根據(jù)上面指定版本中所述的語(yǔ)法命名)時(shí),你可以要求提交從r2到達(dá)的提交,但不包括從r1到達(dá)的那些提交,^r1 r2
它可以寫為r1..r2
。
The … (three dot) Symmetric Difference Notation
類似的符號(hào)r1...r2
被稱為和的對(duì)稱差,r1
并被r2
定義為r1 r2 --not $(git merge-base --all r1 r2)
。它是從r1
(左側(cè))或r2
(右側(cè))中的任一個(gè)可達(dá)的提交集合,但不是來(lái)自兩者。
在這兩個(gè)簡(jiǎn)寫符號(hào)中,可以省略一端,并將其默認(rèn)為HEAD。例如,origin..
是一個(gè)簡(jiǎn)寫,origin..HEAD
并問(wèn)“自從我從原始分支分出后,我做了什么?” 同樣,它..origin
也是一種速記,HEAD..origin
并問(wèn)道:“我從他們身上分離出來(lái)后,起源究竟發(fā)生了什么?” 請(qǐng)注意,..
這意味著HEAD..HEAD
哪個(gè)空白區(qū)域可以從HEAD到達(dá)和無(wú)法到達(dá)。