¿Cuál es la diferencia entre "git show test.rb" y "git show HEAD: test.rb"?

¿Podría explicar la diferencia entre git show test.rb y git show HEAD:test.rb ?

El command git show HEAD:test.rb devuelve:

 test file contents 

mientras que git show test.rb regresa:

 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 

git show for commits mostrará el post de logging y la diferencia textual. Entonces eso es lo que obtienes cuando haces git show , asumiendo que el commit es HEAD. Y el git show file muestra el post de logging y la diferencia textual para HEAD, filtrados a un file .

Para mostrar el contenido de los files en una confirmación concreta, debe git show commit:file . Entonces, el git show HEAD:file muestra el contenido del file en HEAD.

De la página del manual de gitrevisions :

Un sufijo: seguido de una ruta (por ejemplo, HEAD: README); esto nombra el blob o tree en la ruta dada en el object tree-ish nombrado por la parte antes del colon. : ruta (con una parte vacía antes de los dos puntos, por ejemplo: README) es un caso especial de la syntax que se describe a continuación: contenido registrado en el índice en la ruta determinada.

También consulte los ejemplos en el manual de git show --help ( git show --help )

git show test.rb puede volver a escribir como git show -- test.rb Esta forma hace que sea más obvio que está llamando a git show y filtrando el resultado para simplemente test.rb Como la git show pnetworkingeterminada para mostrar HEAD , esto es lo mismo que git show HEAD -- test.rb Básicamente, mostrará la información de confirmación, pero solo le dará una diferencia para el file específico test.rb

Sin embargo, git show HEAD:test.rb está instruyendo explícitamente a git show que el object que desea mostrar es el blob que vive en la ruta test.rb accesible desde el tree asociado con la confirmación HEAD .