Hacer que Git reconozca files previamente movidos

He movido un montón de files manualmente sin pensarlo, y no puedo encontrar la manera de que Git reconozca que los files se han movido y que no son files diferentes. ¿Hay alguna manera de hacer esto que no sea eliminar antiguos y agregar los nuevos (y por lo tanto perder el historial), o volver a hacer todos los cambios con git-mv?

Creo que ya hace esto. Ahora, podría estar equivocado, pero he leído que git rastrea los files en function de su contenido, no según su position en el sistema de files o en function de delta / diferencias. En la stack, creo que se muestra como si los files se eliminan y luego se vuelven a agregar, pero creo que lo he intentado una vez y aún mantenía la historia, debido a la forma antes mencionada de que git rastrea las cosas.

Aún así sería útil que alguien verifique si estoy en lo cierto o no. Lo siento si malinterpreté tu pregunta.

Para que git elimine files que ya han sido eliminados o movidos, simplemente ingrese

 git add -u 

git no rastrea el historial de files individuales y no trata movimientos y copys especialmente, es decir, no hay metadatos especiales que indiquen que se produjo un movimiento o copy. En cambio, cada commit de git es una instantánea completa del tree de trabajo.

Si desea ver movimientos en el git log , puede suministrar -M además de una opción que enumera qué files han cambiado, por ej.

 git log --summary -M 

git observará los treees adyacentes en el historial de compromisos e inferirá si los files fueron movidos por cada confirmación.

Para search copys y cambiar el nombre, puede usar la opción -C , puede suministrarla dos veces para que git parezca más difícil para posibles fonts de copy a expensas de algún performance.

 git log --summary -M -C -C 

Tenga en count que, como git no almacena el historial de files (solo el historial de confirmaciones), incluso si lo hizo git rm y git mv el file, no perderá ningún historial. Todos los cambios en la ruta aún se registrarán y se mostrarán en un git log .

Para comprender mejor por qué Git renombra la detección en lugar del seguimiento de cambio de nombre explícito (más común) y cómo funciona la limitación de la ruta de git log , puede leer la última publicación de la herramienta de seguimiento de contenido de Linus realizada por Junio ​​C Hamano, mantenedor de Git (y references en ella )