2011-03-01 10 views
29

Después de leer Git pre-commit hook : changed/added files, surgió la siguiente pregunta:Git: Mostrar contenido del archivo como se verá como después de cometer

Dado que tengo un archivo con tanto por etapas y cambios unstaged, ¿Cómo puedo mostrar una vista previa del archivo de contenido después de la puesta en escena?

Ejemplo:

echo "foo" >> file 
git add file 
echo "bar" >> file 

salida deseada:

[previous contents of file] 
foo 
+1

¿No 'cat file' le mostrará la copia de trabajo actual de 'file'? –

+0

Sí, es la solución correcta, ¿o era una pregunta incorrecta? – silvio

+0

posible duplicado de [¿Cómo puedo obtener el contenido de un archivo del índice git?] (Http://stackoverflow.com/questions/5032188/how-can-i-get-content-of-a-file-from-git -index) – user123444555621

Respuesta

84

Utilice el prefijo : para acceder a objetos en el índice actual (en etapas pero aún no confirmados).

git show :file 

Ver gitrevisions (el énfasis es mío):

<rev>:<path>, e.g. HEAD:README, :README, master:./README 

Un sufijo : seguido de un nombre de ruta de la gota o los árboles en la ruta dada en el objeto ish-árbol nombrado por la parte antes el colon. :path (con una parte vacía antes de los dos puntos) es un caso especial de la sintaxis que se describe a continuación: contenido registrado en el índice en la ruta de acceso.

+0

+1: muy limpio, mejor que la solución que encontré –

+0

+1: muy bonito, ¡tendré que recordarlo! –

+0

Muy bien, de todos modos, preferiría algo que funcione con rutas relativas. Aunque los documentos indican que 'Una ruta que comienza con ./ o ../ es relativa al directorio de trabajo actual. ', Esto no funciona para mí. – user123444555621

-1

Sólo echar un vistazo a la respuesta más común para esta pregunta: How do I show the changes which have been staged?

La opción --cached es lo que desea.

+0

Esto mostrará *** el diff *** del archivo preparado, pero no le mostrará la forma en que se vería el archivo si acaba de abrirlo en un editor o 'cat' it. –

+0

Disculpas por la votación negativa, ¡pero esa es una respuesta perfectamente buena para una pregunta completamente diferente! : sonrisa: – pvandenberk

6

Actualización: el answer from grawity tiene una solución mucho más ordenado

Esta receta es de jleedev's answer to another question:

git cat-file blob $(git ls-files -s file | awk '{print $2}') 

Es posible que desee crear un git alias de que si se va a utilizar con frecuencia .

+0

Exactamente lo que quería. Desafortunadamente, mi búsqueda no mencionó esa otra pregunta. – user123444555621

+0

@ Pumbaa80: gracias, pero creo que la respuesta de grawity es mejor, y la que debería ser aceptada :) –

+3

Tenga en cuenta que 'cat-file' también acepta el': file'. –

0

Puede hacer git diff --cached, pero esto no es exactamente lo que quiere.

git grep -h --cached^-- file

funciona para mí.

Cuestiones relacionadas