В чем разница между "git show test.rb" и "git show HEAD: test.rb"? - PullRequest
1 голос
/ 27 октября 2011

Не могли бы вы объяснить разницу между 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 <michael.moroshko@gmail.com> 
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

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

git show для коммитов покажет лог-сообщение и текстовые различия.Так вот, что вы получаете, когда делаете git show, а коммит считается HEAD.И git show file показывает сообщение журнала и текстовый diff для HEAD, отфильтрованный до file.

Чтобы показать содержимое файлов при определенной фиксации, вы делаете git show commit:file.Таким образом, git show HEAD:file показывает содержимое файла в HEAD.

С gitrevisions справочной страницы:

Суффикс: сопровождается путем (например, HEAD: README);это имя большого двоичного объекта или дерева по заданному пути в объекте tree-ish, названном частью перед двоеточием.: путь (с пустой частью перед двоеточием, например, README) является частным случаем синтаксиса, описанного ниже: содержимое, записанное в индексе по указанному пути.руководство по git show (git show --help)

2 голосов
/ 27 октября 2011

git show test.rb можно переписать как git show -- test.rb.Эта форма делает более очевидным, что вы звоните git show и фильтруете вывод просто test.rb.Поскольку git show по умолчанию показывает HEAD, это то же самое, что и git show HEAD -- test.rb.По сути, он покажет информацию о коммите, но даст вам только diff для конкретного файла test.rb.

Однако git show HEAD:test.rb явно указывает git show, что объект, который вы хотите показать, является BLOB-объектомкоторый живет по пути test.rb, достижимому из дерева, связанного с коммитом HEAD.

...