Cambié el nombre de un par de archivos usando git mv
, usado git stash
, eché un vistazo rápido a HEAD (sin cambiarlo) y luego lo hice git stash pop
para recuperar todo el lote nuevamente. Mis movimientos habían desaparecido de la lista de confirmaciones, así que los rehice git rm
y el mensaje de confirmación afirmaba que git había detectado que el cambio de nombre era un cambio de nombre. Así que no pensé más en eso.
Pero ahora, después de la confirmación, ¡no puedo acceder al historial de los archivos movidos! Esto es lo que dice git sobre la confirmación 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 he intentado 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 se eliminó 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 estancado 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 antigua del archivo y la nueva copia son 98,8% iguales (2 líneas de 166 cambiadas). Tengo entendido que git debería poder rastrear el archivo en este caso, porque infiere operaciones de cambio de nombre en lugar de almacenarlas explícitamente, y los archivos son lo suficientemente similares como para que creo que debería considerarlos iguales.
¿Hay algo que pueda hacer para solucionar este problema?
Respuestas:
Inténtelo con
git log --follow
su archivo. Aprendo de aquí ¿Es posible mover / cambiar el nombre de archivos en git y mantener su historial?fuente
fatal: ambiguous argument 'file.txt': unknown revision or path not in the working tree
, intente git log --followBueno, veo mis cambios de nombre con
git log -M --summary
..fuente
git log -M --summary
no proporciona ninguna información de cambio de nombre si solo está mirando el historial de un archivo determinado, es decir, con un argumento de archivo.Respondiendo a mi propia pregunta, ya que he logrado calmar mis inquietudes, incluso si no he resuelto mi problema exactamente. (
git log --follow
Aunque todavía no funciona para mí).En primer lugar, el
--summary
registro de la confirmación de cambio de nombre incluye ladelete
línea con el nombre anterior del archivo. Entonces, si es fácil de detectar, puede encontrar su nombre anterior ygit log
desde allí.Si es parte de una confirmación grande y, por lo tanto, un poco más difícil de detectar, y esta situación fue una de mis preocupaciones,
git blame -C
se puede usar con el nuevo nombre del archivo en la primera revisión posterior al cambio de nombre. ¡Presumiblemente quedan líneas del archivo original! - por lo que git debería encontrar su fuente y mostrar el nombre del archivo antiguo (y un hash de confirmación por si acaso). A continuación, puede seguir el rastro congit log
.Entonces, si tiene algún interés en el historial del archivo como una unidad (por el motivo que sea), entonces parece que se puede hacer de manera relativamente sencilla. Aunque tengo la impresión de que git preferiría que lo usaras correctamente.
fuente
git log --follow .
donde el directorio de trabajo es la nueva ubicación no funciona, mientras quegit log --follow path/to/new/dir
, ejecutado desde un directorio principal común de la antigua y la nueva ubicación, funciona--follow
parámetro funciona, pero debe hacerlo:git log --follow -- ./path/to/file
git -log filename.cs
detiene en la confirmación del movimiento del archivo (el directorio actual está configurado en la carpeta del archivo). Sin embargo, la ventana del historial de VS muestra todo el registro de cambios del archivo. También puedo ver que el archivo se ha movido con el escritorio de Github. Pero tambiéngit log -10 --follow filename.cs
muestra el registro antes de mover el compromiso.Creo que esto es lo que estás buscando.
fuente