¿Por qué git log no muestra el historial de un file movido y qué puedo hacer al respecto?

Cambié el nombre de un par de files usando git mv , usé git stash , git stash un vistazo rápido a HEAD (sin cambiarlo) y luego git stash pop para recuperar todo. Mis movimientos habían desaparecido de la list de compromisos, así que los rehice con git rm y el post de confirmación afirmó que git había detectado que el cambio de nombre era un cambio de nombre. Así que no pensé más.

Pero ahora, después de la confirmación, ¡no puedo ver el historial de los files movidos! Esto es lo que dice git sobre el compromiso en cuestión:

 ~/projects% git log --summary commit de6e9fa2179ae17ec35a5c368d246f19da27f93a Author: brone Date: Wed Dec 8 22:37:54 2010 +0000 Moved R_DebugUI into runtime delete mode 100644 test/R_DebugUI_iOS.h delete mode 100644 test/R_DebugUI_iOS.m create mode 100644 system/runtime/src/R_DebugUI_iOS.h create mode 100644 system/runtime/src/R_DebugUI_iOS.m <<snip older commits>> ~/projects% 

Ahora estoy tratando de get el historial de uno de estos files movidos, para poder ver una versión anterior, pero no obtengo nada muy útil:

 ~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m commit de6e9fa2179ae17ec35a5c368d246f19da27f93a Author: brone Date: Wed Dec 8 22:37:54 2010 +0000 Moved R_DebugUI into runtime ~/projects/system/runtime/src% 

(También lo probé sin -M , -C y --find-copies-harder , pero fue en vano).

Puedo get su historial con su nombre anterior, que se detiene en el punto en que fue eliminado de su location anterior:

 ~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m commit de6e9fa2179ae17ec35a5c368d246f19da27f93a Author: brone Date: Wed Dec 8 22:37:54 2010 +0000 Moved R_DebugUI into runtime delete mode 100644 test/R_DebugUI_iOS.m commit 32a22d53c27e260714f759ecb3d3864e38b2e87f Author: brone Date: Tue Dec 7 23:52:51 2010 +0000 Can set debug UI's alpha. <<snip older commits>> ~/projects% 

Así que no estoy completamente atascado esta vez, pero no me gustaría tener que hacer este tipo de cosas todo el time. (Anticipo tener una buena cantidad de files que se moverán al less una vez en su vida).

¿Estoy haciendo algo mal? La copy anterior del file y la nueva copy son 98.8% iguales (se cambiaron 2 líneas de 166). Según tengo entendido, git debería poder rastrear el file en este caso, ya que infiere operaciones de cambio de nombre en lugar de almacenarlas explícitamente, y los files son lo suficientemente similares como para que los considere iguales.

¿Hay algo que pueda hacer para arreglar esto?

Solutions Collecting From Web of "¿Por qué git log no muestra el historial de un file movido y qué puedo hacer al respecto?"

Inténtalo con el git log --follow tu file. Aprendo desde aquí ¿Es posible mover / renombrar files en git y mantener su historial?

Bueno, sí veo mis git log -M --summary nombre con git log -M --summary

Respondiendo a mi propia pregunta, ya que he logrado calmar mis preocupaciones, incluso si no he resuelto mi problema exactamente. (El git log --follow todavía no funciona para mí, sin embargo.)

En primer lugar, el logging de --summary para la confirmación de cambio de nombre incluye la línea de delete con el nombre anterior del file. Entonces, si es fácil de detectar, puedes encontrar su antiguo nombre y git log desde allí.

Si es parte de un compromiso grande, y por lo tanto un poco más difícil de detectar, y esta situación fue una de mis preocupaciones, se puede usar git blame -C con el nuevo nombre del file en la primera revisión posterior al cambio de nombre. Presumiblemente, ¡las líneas permanecen del file original! – Así que git debería encontrar su fuente y mostrar el nombre del file anterior (y un hash de confirmación, por si acaso). A continuación, puede retomar el path con git log .

Por lo tanto, si tiene algún interés en la historia del file como una unidad (por el motivo que sea), parece que se puede hacer de manera relativamente directa. Aunque tengo la printing de que Git preferiría que lo usaras correctamente.

 git log --follow ./path/to/file 

Creo que esto es lo que estás buscando.