2010-07-07 10 views
86

Mi repositorio sufrió cambios como:¿Por qué no funciona "git log - foo" para el archivo eliminado foo?

  1. ... comete alguna relación ...
  2. Commit nuevo archivo foo con 100 líneas de contenido
  3. ... intervenir compromete, algunos de los cuales toca foo ...
  4. insertar el contenido de foo en la parte superior de un archivo existente bar y git rm foo en el mismo se comprometen
  5. ... más relacionado comete ...

Ahora quiero ver el registro del archivo eliminado foo. Todo lo que he leído, incluso en SO, dice que debería poder git log -- foo, pero ese comando no produce salida.

Si encuentro la confirmación que incluye borrar foo puedo git log 1234abcd -- foo y ver su registro, por lo que creo que mi ruta a foo no es el problema. También tenga en cuenta que git merge-base HEAD 1234abcd salidas 1234abcd[...], por lo que creo que debería demostrar que la confirmación es alcanzable desde HEAD. Tenga en cuenta que no hay ningún archivo foo en mi árbol de trabajo (obvio, ya que fue eliminado). Usando Git 1.7.1.1 en OS X.

¿Por qué no funciona git log -- foo y cómo puedo solucionarlo? ¡Gracias!

+5

¿Has probado 'git log --follow - foo' o' git log --follow -M - foo'? (para forzar la detección de cambio de nombre) – VonC

+1

Mierda, intenté '--follow' - pero leyendo' history' Veo que desde entonces he copiado cd'ed en otra parte cuando lo probé, haciendo que la ruta fuera inválida. 'git log --follow - foo' funcionó cuando probé desde el punto de partida correcto. ¿Supongo que Git consideró rodar 'foo' en' bar' como algún tipo de cambio de nombre? En cualquier caso, ¡gracias! Estaré encantado de dar crédito a esto si lo volverá a publicar como una respuesta. – user385804

+1

Molesto que '--' se cambie a' -' en el título de pregunta ... – Cascabel

Respuesta

117

que desea usar la opción --follow en git log, que se describe en la página del manual como:

Continue listing the history of a file beyond renames. 

Efectivamente, esto no sólo le permite ver el historial de un archivo renombrado, pero esto también le permite ver el historial de un archivo que ya no está en el árbol de trabajo. Por lo que el comando se debe utilizar debe ser algo como:

git log --follow -- foo 

Actualización:

Git 2.9 + ahora ha permitido esto por defecto para todos los git diff y git log comandos:

El fin -user frente a los comandos de nivel de porcelana en la familia "git diff" y "git log" habilitan de forma predeterminada la detección de cambio de nombre; aún puede usar la variable de configuración "diff.renames" para deshabilitar esto.

Gracias a x-yuri por el cara a cara!

+0

Me funcionó sin la parte '--follow'. Solo necesitaba agregar '--'. Estoy ejecutando 'git-2.9.0'. –

Cuestiones relacionadas