usar tag revertir restaurar regresar recuperar quitar historial hacer como cambios archivos archivo git history dvcs rename git-log

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



regresar cambios en git (4)

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

Cambié el nombre de un par de archivos 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 lista de compromisos, así que los rehice con git rm y el mensaje 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 archivos 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 obtener el historial de uno de estos archivos 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 obtener su historial con su nombre anterior, que se detiene en el punto en que fue eliminado de su ubicación 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 tiempo. (Anticipo tener una buena cantidad de archivos que se moverán al menos una vez en su vida).

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

¿Hay algo que pueda hacer para arreglar esto?



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 registro de --summary para la confirmación de cambio de nombre incluye la línea de delete con el nombre anterior del archivo. 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 archivo en la primera revisión posterior al cambio de nombre. Presumiblemente, ¡las líneas permanecen del archivo original! - Así que git debería encontrar su fuente y mostrar el nombre del archivo anterior (y un hash de confirmación, por si acaso). A continuación, puede retomar el camino con git log .

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


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

Creo que esto es lo que estás buscando.