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