2011-10-27 71 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'调用)的输出。 –

相关问题