?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
git-rev-parse - Pick out and massage parameters
git rev-parse [ --option ] <args>…
許多Git瓷器命令會(huì)混合使用標(biāo)志(即以短劃線開頭的參數(shù)-
)以及參數(shù),這些參數(shù)用于git rev-list
它們?cè)趦?nèi)部使用的基礎(chǔ)命令,以及標(biāo)志和參數(shù)用于其下游使用的其他命令git rev-list
。該命令用于區(qū)分它們。
這些選項(xiàng)中的每一個(gè)都必須首先出現(xiàn)在命令行中。
--parseopt
使用git rev-parse
在選項(xiàng)解析模式(見下文PARSEOPT部分)。
--sq-quote
使用git rev-parse
的shell引用模式(見下面的SQ-報(bào)價(jià)部分)。與--sq
下面的選項(xiàng)相反,此模式只能引用。沒有其他任何事情可以指揮輸入。
--keep-dashdash
只在--parseopt
模式中有意義。告訴選項(xiàng)解析器回顯第一次--
會(huì)面而不是跳過它。
--stop-at-non-option
只在--parseopt
模式中有意義。讓選項(xiàng)解析器在第一個(gè)非選項(xiàng)參數(shù)處停止。這可以用來解析自己接受選項(xiàng)的子命令。
--stuck-long
只在--parseopt
模式中有意義。如果可用的話,以長格式輸出選項(xiàng),并且其參數(shù)被卡住。
--revs-only
不要輸出不適用于git rev-list
命令的標(biāo)志和參數(shù)。
--no-revs
不要輸出用于git rev-list
命令的標(biāo)志和參數(shù)。
--flags
不要輸出非標(biāo)志參數(shù)。
--no-flags
不輸出標(biāo)志參數(shù)。
--default <arg>
如果沒有用戶給出的參數(shù),則<arg>
改為使用。
--prefix <arg>
行為就像git rev-parse
從<arg>
工作樹的子目錄中調(diào)用一樣。任何相關(guān)的文件名被解析,就好像它們以前綴一樣,<arg>
并將以該形式打印。
這可用于將參數(shù)轉(zhuǎn)換為在子目錄中運(yùn)行的命令,以便在移動(dòng)到存儲(chǔ)庫的頂層后仍可使用它們。例如:
prefix=$(git rev-parse --show-prefix)cd "$(git rev-parse --show-toplevel)"# rev-parse provides the -- needed for 'set'eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
--verify
驗(yàn)證只提供了一個(gè)參數(shù),并且可以將其轉(zhuǎn)換為可用于訪問對(duì)象數(shù)據(jù)庫的原始20字節(jié)SHA-1。如果是這樣,將其發(fā)送到標(biāo)準(zhǔn)輸出; 否則,出錯(cuò)。
如果要確保輸出實(shí)際命名對(duì)象數(shù)據(jù)庫中的對(duì)象并/或可以將其用作所需的特定對(duì)象類型,則可以將^{type}
剝離運(yùn)算符添加到參數(shù)中。例如,git rev-parse "$VAR^{commit}"
將確保$VAR
命名為提交ish的現(xiàn)有對(duì)象(即,提交或指向提交的帶注釋的標(biāo)記)。確??梢允褂?code>$VAR任何類型的現(xiàn)有對(duì)象的名稱git rev-parse "$VAR^{object}"
。
-q --quiet
只在--verify
模式中有意義。如果第一個(gè)參數(shù)不是有效的對(duì)象名稱,則不輸出錯(cuò)誤消息; 而是靜靜地退出非零狀態(tài)。成功時(shí),將有效對(duì)象名稱的SHA-1打印到stdout。
--sq
通常每個(gè)標(biāo)志和參數(shù)輸出一行。此選項(xiàng)使輸出成為單行,并且適用于shell的消耗。當(dāng)你期望你的參數(shù)包含空格和換行符時(shí)(例如使用鎬-S
時(shí)git diff-*
)很有用。與--sq-quote
選項(xiàng)相反,命令輸入仍然像往常一樣解釋。
--short=length
--verify
與之相同,但將對(duì)象名縮短為至少包含length
字符的唯一前綴。最小長度是4,默認(rèn)值是core.abbrev
配置變量的有效值(請(qǐng)參閱git-config [1])。
--not
顯示對(duì)象名稱時(shí),以前綴為前綴,^
并^
從已有對(duì)象名稱中刪除前綴。
--abbrev-ref=(strict|loose)
對(duì)象名稱的非含糊短名稱。選項(xiàng)core.warnAmbiguousRefs用于選擇嚴(yán)格的縮寫模式。
--symbolic
通常,對(duì)象名稱以SHA-1形式輸出(可能帶有^
前綴); 該選項(xiàng)使它們以盡可能接近原始輸入的形式輸出。
--symbolic-full-name
這與--symbolic類似,但它省略了不是參考的輸入(即分支或標(biāo)簽名稱;或者更明確地消除“頭部/主”形式的歧義,當(dāng)您想命名“主”分支時(shí),標(biāo)簽“master”),并將其顯示為完整的refnames(例如“refs / heads / master”)。
--all
顯示在中找到的所有參考refs/
。
--branches=pattern --tags=pattern --remotes=pattern
顯示所有分支,標(biāo)簽,或遠(yuǎn)程跟蹤分支,分別為(即,裁判發(fā)現(xiàn)refs/heads
,refs/tags
或refs/remotes
分別)。
如果pattern
給出a,則只顯示匹配給定shell glob的引用。如果模式不包含匹配字符(?
,,*
或[
),則通過追加將其轉(zhuǎn)換為前綴匹配/*
。
--glob=pattern
顯示與shell glob模式匹配的所有參考pattern
。如果模式?jīng)]有開始refs/
,則會(huì)自動(dòng)添加前綴。如果模式不包含匹配字符(?
,,*
或[
),則通過追加將其轉(zhuǎn)換為前綴匹配/*
。
--exclude=<glob-pattern>
不包括裁判匹配<glob-pattern>
,未來--all
,--branches
,--tags
,--remotes
,或--glob
原本考慮。這個(gè)選項(xiàng)排除累積模式到下一個(gè)的重復(fù)--all
,--branches
,--tags
,--remotes
,或--glob
選擇(其他選項(xiàng)或參數(shù)不清除積累的模式)。
給予不應(yīng)該開始的模式refs/heads
,refs/tags
或refs/remotes
當(dāng)應(yīng)用到--branches
,--tags
或--remotes
分別,他們必須開始refs/
在應(yīng)用于--glob
或--all
。如果尾隨/*
是有意的,則必須明確給出。
--disambiguate=<prefix>
顯示名稱以給定前綴開頭的每個(gè)對(duì)象。<prefix>的長度必須至少為4個(gè)十六進(jìn)制數(shù)字,以避免錯(cuò)誤地列出存儲(chǔ)庫中的每個(gè)對(duì)象。
--local-env-vars
列出存儲(chǔ)庫本地的GIT_ *環(huán)境變量(例如GIT_DIR或GIT_WORK_TREE,但不包括GIT_EDITOR)。僅列出變量的名稱,而不是它們的值,即使它們已設(shè)置。
--git-dir
顯示$GIT_DIR
是否已定義。否則,顯示.git目錄的路徑。顯示的路徑相對(duì)于當(dāng)前工作目錄。
如果$GIT_DIR
未定義,并且未檢測(cè)到當(dāng)前目錄位于Git存儲(chǔ)庫或工作樹中,則向stderr發(fā)送消息并以非零狀態(tài)退出。
--absolute-git-dir
就像--git-dir
,但它的輸出始終是規(guī)范化的絕對(duì)路徑。
--git-common-dir
顯示$GIT_COMMON_DIR
是否已定義,否則$GIT_DIR
。
--is-inside-git-dir
當(dāng)前工作目錄位于存儲(chǔ)庫目錄下方時(shí),打印“true”,否則為“false”。
--is-inside-work-tree
當(dāng)前工作目錄位于存儲(chǔ)庫的工作樹內(nèi)時(shí),打印“true”,否則為“false”。
--is-bare-repository
當(dāng)存儲(chǔ)庫是裸打印“真”,否則“假”。
--resolve-git-dir <path>
檢查<path>是否是有效的存儲(chǔ)庫或指向有效存儲(chǔ)庫的gitfile,并打印存儲(chǔ)庫的位置。如果<path>是一個(gè)gitfile,那么將打印解析的實(shí)際存儲(chǔ)庫的路徑。
--git-path <path>
解析“$ GIT_DIR / <path>”并考慮其他路徑重定位變量,例如$ GIT_OBJECT_DIRECTORY,$ GIT_INDEX_FILE ...。例如,如果$ GIT_OBJECT_DIRECTORY設(shè)置為/ foo / bar,則“git rev-parse --git-path objects / abc”返回/ foo / bar / abc。
--show-cdup
當(dāng)從子目錄調(diào)用該命令時(shí),顯示相對(duì)于當(dāng)前目錄的頂級(jí)目錄的路徑(通常是一系列“../”或空字符串)。
--show-prefix
當(dāng)從子目錄調(diào)用該命令時(shí),顯示當(dāng)前目錄相對(duì)于頂級(jí)目錄的路徑。
--show-toplevel
顯示頂級(jí)目錄的絕對(duì)路徑。
--show-superproject-working-tree顯示使用當(dāng)前存儲(chǔ)庫作為其子模塊的超級(jí)項(xiàng)目工作樹(如果存在)的根的絕對(duì)路徑。如果當(dāng)前存儲(chǔ)庫未被任何項(xiàng)目用作子模塊,則不輸出。
--shared-index-path
在分割索引模式下顯示共享索引文件的路徑,如果不在分割索引模式下則顯示空白。
--since=datestring --after=datestring
解析日期字符串,并輸出相應(yīng)的--max-age =參數(shù)git rev-list
。
--until=datestring --before=datestring
解析日期字符串,并輸出相應(yīng)的--min-age =參數(shù)git rev-list
。
<args>…
要解析的標(biāo)志和參數(shù)。
修訂參數(shù)<rev>
通常(但不一定)命名提交對(duì)象。它使用所謂的extended SHA-1
語法。以下是拼寫對(duì)象名稱的各種方法。列表附近列出的名稱包含在提交中的樹和blob。
<sha1>, e.g. dae86e1950b1277e545cee180551750029cfe735, dae86e
完整的SHA-1對(duì)象名稱(40字節(jié)的十六進(jìn)制字符串)或存儲(chǔ)庫中唯一的前導(dǎo)子字符串。例如,dae86e1950b1277e545cee180551750029cfe735和dae86e都會(huì)命名相同的提交對(duì)象,前提是存儲(chǔ)庫中沒有其他對(duì)象,其對(duì)象名稱以dae86e開頭。
<describeOutput>, e.g. v1.7.4.2-679-g3bee7fb
輸出來自git describe
; 即最接近的標(biāo)記,可選地后跟破折號(hào)和多個(gè)提交,后跟短劃線,a g
和縮寫對(duì)象名稱。
<refname>, e.g. master, heads/master, refs/heads/master
符號(hào)參考名稱。例如master
通常意味著引用的提交對(duì)象refs/heads/master
。如果你碰巧有兩個(gè)heads/master
和tags/master
,你可以明確地說heads/master
要告訴Git的你的意思是哪一個(gè)。當(dāng)模棱兩可時(shí),<refname>
通過在以下規(guī)則中進(jìn)行第一次匹配來消除a :
如果$GIT_DIR/<refname>
存在,那就是你的意思(這通常是有用的,只有為HEAD
,FETCH_HEAD
,ORIG_HEAD
,MERGE_HEAD
和CHERRY_PICK_HEAD
);
否則,refs/<refname>
如果存在;
否則,refs/tags/<refname>
如果存在;
否則,refs/heads/<refname>
如果存在;
否則,refs/remotes/<refname>
如果存在;
否則,refs/remotes/<refname>/HEAD
如果存在。
HEAD
命名您在工作樹中基于更改的提交。FETCH_HEAD
記錄您在上次git fetch
調(diào)用時(shí)從遠(yuǎn)程存儲(chǔ)庫中獲取的分支。ORIG_HEAD
是通過命令創(chuàng)建的,這些命令HEAD
以激烈的方式移動(dòng)您的行為,記錄HEAD
它們?cè)诓僮髦暗奈恢?,以便您可以輕松地將分支的頂端更改回到運(yùn)行之前的狀態(tài)。MERGE_HEAD
記錄您在運(yùn)行時(shí)正在合并到您的分支中的提交git merge
。CHERRY_PICK_HEAD
記錄您在運(yùn)行時(shí)正在挑選的提交git cherry-pick
。
請(qǐng)注意,refs/*
上述任何情況都可能來自$GIT_DIR/refs
目錄或$GIT_DIR/packed-refs
文件。雖然未指定ref名稱編碼,但首選UTF-8,因?yàn)槟承┹敵鎏幚砜赡懿捎肬TF-8中的ref名稱。
@
@
alone is a shortcut for HEAD
.
<refname>@{<date>}, e.g. master@{yesterday}, HEAD@{5 minutes ago}
后面跟著@
帶括號(hào)的括號(hào)中的后綴(例如{yesterday}
,{1 month 2 weeks 3 days 1 hour 1 second ago}
或{1979-02-26 18:30:00}
)的后綴指定前一個(gè)時(shí)間點(diǎn)的ref的值。該后綴只能在ref名稱后面使用,并且ref必須具有現(xiàn)有的日志($GIT_DIR/logs/<ref>
)。請(qǐng)注意,這會(huì)在給定的時(shí)間查看當(dāng)?shù)?/strong>裁判的狀態(tài); 例如master
上周您當(dāng)?shù)氐姆种C(jī)構(gòu)。如果您想查看某些時(shí)間內(nèi)提交的內(nèi)容,請(qǐng)參閱--since
和--until
。
<refname>@{<n>}, e.g. master@{1}
后綴為@
帶括號(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>
)。
@{<n>}, e.g. @{1}
您可以使用@
帶有空引用部分的構(gòu)造來獲取當(dāng)前分支的reflog條目。例如,如果您在分支上,blabla
則@{1}
意味著與之相同blabla@{1}
。
@{-<n>}, e.g. @{-1}
該構(gòu)造@{-<n>}
意味著在當(dāng)前之前檢出的第n個(gè)分支/提交。
<branchname>@{upstream}, e.g. master@{upstream}, @{u}
@{upstream}
branchname(簡稱<branchname>@{u}
)的后綴是指由branchname指定的分支設(shè)置為在(使用branch.<name>.remote
and branch.<name>.merge
)配置的基礎(chǔ)上構(gòu)建的分支。缺少的branchname默認(rèn)為當(dāng)前的。當(dāng)用大寫拼寫時(shí),這些后綴也是可接受的,無論大小寫是什么,它們都表示相同的事物。
<branchname>@{push}, e.g. master@{push}, @{push}
@{push}
如果在檢出時(shí)git push
運(yùn)行branchname
(或當(dāng)前HEAD
沒有指定branchname),后綴將報(bào)告分支“我們將推送到哪里” 。由于我們的推送目標(biāo)位于遠(yuǎn)程存儲(chǔ)庫中,當(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è)后綴也是可以接受的,無論大小寫是什么意思都是相同的。
<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)參閱下面的表格來說明此表格的用法。
<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>
是樹型,則<rev>^{tree}
描述相應(yīng)的樹型對(duì)象。<rev>^0
是短暫的<rev>^{commit}
。
rev^{object}
可以用來確定rev
存在的對(duì)象的名稱,而不需要rev
作為標(biāo)簽,也不需要解引用rev
; 因?yàn)橐粋€(gè)標(biāo)簽已經(jīng)是一個(gè)對(duì)象,所以即使一次到達(dá)一個(gè)對(duì)象也不需要解除引用。
rev^{tag}
可以用來確保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
下面的語法不同之處在于它返回最年輕的匹配提交其是從可到達(dá)<rev>
之前^
。
:/<text>, e.g. :/fix nasty bug
一個(gè)冒號(hào),后跟一個(gè)斜線,后跟一個(gè)文本,命名提交消息與指定正則表達(dá)式匹配的提交。該名稱返回可從任何ref訪問的最年輕匹配提交。正則表達(dá)式可以匹配提交消息的任何部分。要匹配以字符串開頭的消息,可以使用例如:/^foo
。特殊序列:/!
保留給修飾符以匹配內(nèi)容。:/!-foo
執(zhí)行否定匹配,同時(shí):/!!foo
匹配文字!
字符,然后匹配foo
。任何以其他序列開始的序列:/!
現(xiàn)在都被保留。
<rev>:<path>, e.g. HEAD:README, :README, master:./README
一個(gè)后綴:
后面跟著一個(gè)路徑的名稱是由冒號(hào)前部分命名的tree-ish對(duì)象中給定路徑上的blob或樹。:path
(在冒號(hào)前有一個(gè)空白部分)是下面描述的語法的特例:記錄在給定路徑索引處的內(nèi)容。以當(dāng)前工作目錄開始./
或../
相對(duì)于當(dāng)前工作目錄的路徑。給定的路徑將被轉(zhuǎn)換為相對(duì)于工作樹的根目錄。這對(duì)于從具有與工作樹相同樹結(jié)構(gòu)的提交或樹來處理blob或樹是非常有用的。
:<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是來自正在合并的分支的版本。
以下是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)來指定單個(gè)修訂,意味著reachable
來自給定提交的一組提交。
提交的可達(dá)集是提交本身和祖先鏈中的提交。
^<rev> (caret) Notation
要排除提交可達(dá)的提交,使用前綴^
符號(hào)。例如,^r1 r2
意味著提交可達(dá),r2
但不包括從r1
(即r1
其祖先)可達(dá)的。
The .. (two-dot) Range Notation
該^r1 r2
組操作似乎經(jīng)常有它的簡寫。當(dāng)你有兩個(gè)提交r1
并且r2
(根據(jù)上面指定版本中所述的語法命名)時(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á)的提交集合,但不是來自兩者。
在這兩個(gè)簡寫符號(hào)中,可以省略一端,并將其默認(rèn)為HEAD。例如,origin..
是一個(gè)簡寫,origin..HEAD
并問“自從我從原始分支分出后,我做了什么?” 同樣,它..origin
也是一種速記,HEAD..origin
并問道:“我從他們身上分離出來后,起源究竟發(fā)生了什么?” 請(qǐng)注意,..
這意味著HEAD..HEAD
哪個(gè)空白區(qū)域可以從HEAD到達(dá)和無法到達(dá)。
還有三個(gè)其他的shorthands,對(duì)于合并提交,對(duì)于由提交和它的父提交形成的集合進(jìn)行命名特別有用。
該r1^@
符號(hào)表示的所有家長r1
。
該r1^!
表示包括提交r1
但排除其所有父母。這個(gè)符號(hào)本身表示單個(gè)提交r1
。
該<rev>^-<n>
符號(hào)包括<rev>
但不包括<N>個(gè)親本(即,簡寫<rev>^<n>..<rev>
),其中<n>
= 1,如果沒有給出。這對(duì)合并提交通常很有用,您可以通過合并提交<commit>^-
來獲取合并提交中合并的分支中的所有提交<commit>
(包括<commit>
它自己)。
雖然<rev>^<n>
是關(guān)于指定一個(gè)單一的提交父母,但這三個(gè)符號(hào)也考慮到它的父母。例如,你可以說HEAD^2^@
,但是你不能說HEAD^@^2
。
<rev>
包含可從<rev>(即<rev>及其祖先)訪問的提交。
^<rev>
排除可從<rev>(即<rev>及其祖先)訪問的提交。
<rev1>..<rev2>
包含可從<rev2>訪問的提交,但不包括可從<rev1>訪問的提交。當(dāng)<rev1>或<rev2>被省略時(shí),它默認(rèn)為HEAD
。
<rev1>...<rev2>
包含可從<rev1>或<rev2>訪問的提交,但排除可從兩者訪問的提交。當(dāng)<rev1>或<rev2>被省略時(shí),它默認(rèn)為HEAD
。
<rev>^@, e.g. HEAD^@
一個(gè)后綴^
后跟一個(gè)符號(hào)與列出所有父母的<rev>
意思相同(意思是,包括任何可從其父母獲得的東西,但不包括承諾本身)。
<rev>^!, e.g. HEAD^!
一個(gè)后綴^
后跟一個(gè)感嘆號(hào)的方式與提交相同<rev>
,然后它的所有父母前綴^
以排除它們(和它們的祖先)。
<rev>^-<n>, e.g. HEAD^-, HEAD^-2
相當(dāng)于<rev>^<n>..<rev>
,<n>
如果沒有給出,則= 1。
這里有一些使用上面的Loeliger插圖的例子,仔細(xì)地說明了符號(hào)的擴(kuò)展和選擇中的每一步:
Args Expanded arguments Selected commits D G H D D F G H I J D F^G D H D^D B E I J F B^D B C E I J F B C C I J F C B..C = ^B C C B...C = B ^F C G H D E B C B^- = B^..B= ^B^1 B E I J F B C^@ = C^1= F I J F B^@ = B^1 B^2 B^3= D E F D G H E F I J C^! = C ^C^@= C ^C^1= C ^F C B^! = B ^B^@= B ^B^1 ^B^2 ^B^3= B ^D ^E ^F B F^! D = F ^I ^J D G H D F
在--parseopt
模式下,git rev-parse
幫助按摩選項(xiàng),使shell腳本擁有與C builtins相同的設(shè)施。它作為一個(gè)選項(xiàng)標(biāo)準(zhǔn)化器(例如拆分單個(gè)交換機(jī)聚合值),有點(diǎn)像getopt(1)
。
它接受標(biāo)準(zhǔn)輸入的解析和理解選項(xiàng)的規(guī)范,并在標(biāo)準(zhǔn)輸出上回顯一個(gè)適合于sh(1)
eval
用規(guī)范化參數(shù)替換參數(shù)的字符串。如果發(fā)生錯(cuò)誤,它會(huì)在標(biāo)準(zhǔn)錯(cuò)誤流上輸出使用情況,并以代碼129退出。
注意:確保在傳遞結(jié)果時(shí)引用結(jié)果eval
。見下面的例子。
git rev-parse --parseopt
輸入格式完全基于文本。它有兩部分,由僅包含一行的行分隔--
。分隔符之前的行(應(yīng)該是一個(gè)或多個(gè))用于使用。分隔符后面的行描述了選項(xiàng)。
每行選項(xiàng)都有以下格式:
<opt-spec><flags>*<arg-hint>? SP+ help LF
<opt-spec>
它的格式是短選項(xiàng)字符,然后是用逗號(hào)分隔的長選項(xiàng)名稱。這兩個(gè)部分都不是必需的,但至少需要一個(gè)??赡懿话魏?code><flags>字符。h,help
,dry-run
并且f
是正確的例子<opt-spec>
。
<flags>
<flags>
are of *
, =
, ?
or !
.
如果選項(xiàng)帶有參數(shù),請(qǐng)使用=
。
使用?
意味著選項(xiàng)接受一個(gè)可選參數(shù)。您可能想要使用該--stuck-long
模式來明確地解析可選參數(shù)。
使用*
意味著該選項(xiàng)不應(yīng)該在所生成的使用上市-h
的說法。它顯示為--help-all
在gitcli [7]中記錄。
使用!
不使提供相應(yīng)的否定長選項(xiàng)。
<arg-hint>
<arg-hint>
,如果指定,則用作幫助輸出中參數(shù)的名稱,用于帶有參數(shù)的選項(xiàng)。<arg-hint>
由第一個(gè)空格終止。通常使用短劃線來分隔多詞論證提示中的單詞。
在刪除空格之后,該行的其余部分將用作與該選項(xiàng)關(guān)聯(lián)的幫助。
空白行被忽略,并且不符合此規(guī)格的行被用作選項(xiàng)組標(biāo)題(用空格開始行以有意地創(chuàng)建此類行)。
OPTS_SPEC="\ some-command [options] <args>...some-command does foo and bar!--h,help show the help foo some nifty option --foo bar= some cool option --bar with an argument baz=arg another cool option --baz with a named argument qux?path qux may take a path argument but has meaning by itself An option group Header C? option C with an optional argument" eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
當(dāng)"$@"
是-h
或--help
在上述例子中,下面的用法文本將被顯示:
usage: some-command [options] <args>... some-command does foo and bar! -h, --help show the help --foo some nifty option --foo --bar ... some cool option --bar with an argument --baz <arg> another cool option --baz with a named argument --qux[=<path>] qux may take a path argument but has meaning by itself An option group Header -C[...] option C with an optional argument
在--sq-quote
模式中,git rev-parse
標(biāo)準(zhǔn)輸出上的回聲適合單線sh(1)
eval
。這條線是通過標(biāo)準(zhǔn)化后面的參數(shù)來完成的--sq-quote
。除了引用參數(shù)外,沒有其他任何事情完成了。
如果希望命令輸入git rev-parse
在輸出被shell引用之前仍照常解釋,請(qǐng)參閱--sq
選項(xiàng)。
$ cat >your-git-script.sh <<\EOF #!/bin/sh args=$(git rev-parse --sq-quote "$@") # quote user-supplied arguments command="git frotz -n24 $args" # and use it inside a handcrafted # command line eval "$command"EOF $ sh your-git-script.sh "a b'c"
打印當(dāng)前提交的對(duì)象名稱:$ git rev-parse --verify HEAD
從$ REV shell變量中的版本打印提交對(duì)象名稱:
$ git rev-parse --verify $ REV ^ {commit}
如果$ REV為空或者不是有效的修訂版,這將會(huì)出錯(cuò)。
與上面類似:
$ git rev-parse --default master --verify $REV
但如果$ REV為空,則會(huì)打印來自主服務(wù)器的提交對(duì)象名稱。