2011-10-27 70 views
1

您能解釋一下git show test.rbgit show HEAD:test.rb之間的區別嗎?「git show test.rb」和「git show HEAD:test.rb」有什麼區別?

命令git show HEAD:test.rb返回:

test file contents 

git show test.rb回報:

commit a8e90b3dbf4eed03cdbb3cd3b99f98e9153c7219 
Author: Misha Moroshko <[email protected]> 
Date: Thu Oct 27 17:03:04 2011 
+1100 

    asd 

diff --git a/test.rb b/test.rb new file mode 100644 index 
0000000..b48e119 
--- /dev/null 
+++ b/test.rb @@ -0,0 +1 @@ 
+test file contents 

回答

3

git show對於提交將顯示日誌消息和文本差異。所以這就是你在做git show時得到的結果,假定提交是HEAD。並且git show file顯示頭部的日誌消息和文本差異,過濾到file

要在特定提交中顯示文件的內容,請執行git show commit:file。所以git show HEAD:file顯示了HEAD文件的內容。

gitrevisions手冊頁:

後綴:後跟的路徑(例如HEAD:自述);這會在冒號前面的 部分命名的tree-ish對象中的給定路徑中命名blob 或樹。 :路徑(在冒號前有一個空的部分,例如 :README)是下一個描述的語法的特例:內容 記錄在給定路徑的索引處。

也可參考的例子在GIT節目指南(git show --help

+0

@CharlesBailey:你錯了。 –

+0

@Charles Bailey - 不,你必須做'git show HEAD:file'來獲取文件的內容。對於索引,'git show:a'。它在'gitrevisions'中明確指出# – manojlds

+0

@manojlds:手冊頁的哪一部分提到'git show file'過濾器到'file'? –

2

git show test.rb可以改寫爲git show -- test.rb。這種形式使得您更清楚地呼叫git show並將輸出篩選爲test.rb。由於git show默認顯示爲HEAD,因此與git show HEAD -- test.rb相同。基本上,它會顯示提交信息,但只給你一個具體文件test.rb的差異。

然而,git show HEAD:test.rb明確指示git show要顯示的對象是住在路徑test.rb從與HEAD相關承諾樹到達的斑點。

+0

@CharlesBailey:的確,如果'test.rb'是一個分支或標記的名稱,然後它的含糊不清。但實際上這不是這種情況。由於'test.rb'不是分支或標籤的名稱,因此它明確地是文件模式的名稱,用於過濾'git diff-tree'('git show'調用)的輸出。 –

相關問題