2009-09-08 48 views

Respuesta

105
git show HEAD^:path/to/file 

Puede utilizar un identificador de confirmación explícita o HEAD~n para ver las versiones anteriores o si ha habido más de una confirmación desde lo eliminó.

+0

Sí, esto era lo que buscaba. Casi lo tuve pero mi sintaxis estaba equivocada. ¡Gracias! –

+5

Tenga en cuenta que 'ruta/a/archivo' es una ruta completa desde la parte superior del proyecto (dir superior del repositorio). –

+0

Tengo 'fatal: nombre de objeto inválido 'HEAD ^'.' (Tengo que mencionar que solo tengo "Confirmación inicial") – vladkras

6

Dado que es posible que no recordar el camino exacto, en su lugar puede obtener el sha1 de git log, entonces solo puede emitir

git cat-file -p <sha1> 
+0

@artlessnoise ¡Agradable! – pdeschen

+2

En nombre de [Samuel Slund] (http://stackoverflow.com/review/suggested-edits/2993006): Una forma de encontrar la suma de sha1 que se usará arriba es: 'git whatchanged --no-abbrev' que da salida similar al registro de git (o svn). –

34

Si este es un archivo que ha eliminado un tiempo atrás y Don' t quiere cazar a una revisión, puede utilizar (el archivo se llama foo en este ejemplo, se puede utilizar una ruta completa):

git show $(git rev-list --max-count=1 --all -- foo)^:foo 

la invocación rev-list busca todas las revisiones de foo pero solo enumera uno. Dado que rev-list enumera en orden cronológico inverso, entonces lo que enumera es la última revisión que cambió foo, que sería la confirmación que borró foo. (Esto se basa en la suposición de que git no permite que se modifique un archivo eliminado y, sin embargo, queda eliminado). No puede usar la revisión que rev-list devuelve como está porque foo ya no existe allí. Debe solicitar el anterior que contiene la última revisión del archivo, de ahí el ^ en git show.

+1

Es posible que deba cambiar el último foo a ./foo. Y para ellos que no usan bash, obtengan el id con "git rev-list --max-count = 1 --all - foo" y luego hagan "git show 5824127a8d99576632a04ac2b5c2344bcf751967: ./ foo" con el ID (524 .. es el id) – Dror

+1

Buena respuesta. Tuve que usar ~ en lugar de ^. No estoy seguro por qué. Y para que la gente lo tenga claro, 'foo' debe ser un camino completo desde la raíz de git. – pedorro

+1

Es exactamente lo que estaba buscando, gracias :) – rzymek

Cuestiones relacionadas