Respuestas:
Debe usar -M para permitir que git detecte automáticamente el archivo movido cuando difiera. Usando sologit diff
como knittl mencionado no funciona para mí.
Así que simplemente: git diff -M
debería hacerlo.
La documentación para este cambio es:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
~/.gitconfig
?
git diff
. La ejecución git diff -M
en un solo archivo (renombrado) no informa un cambio de nombre.
git log --follow -- file_after_move.txt
funciona bien. Muestra toda la historia, incluso antes de la mudanza. ¿Algunas ideas? Estoy funcionando git version 2.11.0.windows.1
.
-C
opción para detectar copias es útil y similar. Lo usé -M
para mirar una diferencia donde había refactorizado un archivo en dos (sin que ninguno de los nombres coincida con el original).
Además de lo que knittl escribió , siempre puedes usar:
git diff HEAD:./oldfilename newfilename
donde HEAD:./oldfilename
significa oldfilename en el último commit (en HEAD), relativo al directorio actual.
Si no tienes git lo suficientemente nuevo, deberías usar en su lugar:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
al directorio y no agrega --
antes del commit:path
par. Git parece ser muy exigente con la sintaxis aquí.
<commit-ish>:<pathname>
sintaxis es un identificador de objeto, algo Git-ish; después de que --
Git solo espera nombres de archivo.
Con git 2.9 (junio de 2016), no tendrá que agregar -M
más. git diff
utiliza -M
por defecto.
Ver commit 5404c11 , commit 9501d19 , commit a9276a6 , commit f07fc9e , commit 62df1e6 (25 de febrero de 2016) por Matthieu Moy ( moy
) .
(Fusionada por Junio C Hamano - gitster
- en commit 5d2a30d , 03 abr 2016)
diff
: activardiff.renames
por defectoLa detección de cambio de nombre es una característica muy conveniente, y los nuevos usuarios no deberían tener que buscar en la documentación para beneficiarse de ella.
Las posibles objeciones a la activación de la detección de cambio de nombre son que a veces falla y a veces es lenta. Pero la detección de cambio de nombre ya está activada por defecto en varios casos como "
git status
" y "git merge
", por lo que la activacióndiff.renames
no cambia la situación de manera fundamental. Cuando falla la detección de cambio de nombre, ahora falla constantemente entre "git diff
" y "git status
".Esta configuración no afecta los comandos de plomería, por lo tanto, los scripts bien escritos no se verán afectados.
git diff -M
activa la detección de cambio de nombre como han dicho otros (y como señaló @VonC, se activa por defecto desde git 2.9). Pero si tiene un conjunto de cambios grande, la detección inexacta de cambio de nombre aún puede desactivarse nuevamente. Git mostrará una advertencia como la siguiente, que es fácil pasar por alto en medio de la diferencia que está viendo:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
En ese caso, configure la opción de configuración como sugiere git, por ejemplo
git config diff.renamelimit 450
y vuelva a ejecutar su comando diff.
Por alguna razón, usar HEAD:./oldfilename
(o ruta absoluta) no funcionó para mí, pero HEAD:oldfilename
sí (gracias cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
?
simplemente ejecute git diff
sin ningún argumento, o git diff -- newfilename
. git es lo suficientemente inteligente como para comparar los archivos / contenidos correctos (es decir, contenido original antes de cambiar el nombre con contenido alterado después de cambiar el nombre)
git mv
con un solo archivo y luego comparando el estado por etapas con otra rama idéntica producirá el diferencial "todo fue eliminado y recreado de nuevo" a menos que -M
se use.
git diff -- yourRenamedFile
será suficiente. Vea mi respuesta a continuación