¿Cómo puedo ver el historial de cambios de un archivo individual en Git, detalles completos con lo que ha cambiado?
He llegado tan lejos como:
git log -- [filename]
que me muestra el historial de confirmación del archivo, pero ¿cómo obtengo el contenido de cada uno de los cambios del archivo?
Estoy tratando de hacer la transición desde MS SourceSafe y eso solía ser un simple right-click
→ show history
.
Respuestas:
Para esto usaría:
o para seguir el nombre del archivo renombrados anteriores
fuente
Puedes usar
para permitir que git genere los parches para cada entrada de registro.
Ver
para obtener más opciones, en realidad puede hacer muchas cosas buenas :) Para obtener solo la diferencia para un compromiso específico, puede
o cualquier otra revisión por identificador. O usar
para navegar los cambios visualmente.
fuente
git log --follow -p -- path-to-file
Esto mostrará el historial completo del archivo (incluido el historial más allá de los cambios de nombre y con diferencias para cada cambio).
En otras palabras, si el archivo nombrado
bar
alguna vez fue nombradofoo
, entoncesgit log -p bar
(sin la--follow
opción) solo mostrará el historial del archivo hasta el punto en el que fue renombrado; no mostrará el historial del archivo cuando se conocía comofoo
. El usogit log --follow -p bar
mostrará el historial completo del archivo, incluidos los cambios en el archivo cuando se conocía comofoo
. La-p
opción garantiza que se incluyan diferencias para cada cambio.fuente
--follow
asegura que veas el cambio de nombre de los archivos (2.)-p
asegura que veas cómo se cambia el archivo (3.) es solo la línea de comandos.--
se agregó, pero no sé por qué esto lo hace mejor. ¿Qué es lo que hace?--
opción le dice a Git que ha llegado al final de las opciones y que todo lo que sigue--
debe tratarse como un argumento. Paragit log
esto sólo se hace ninguna diferencia si usted tiene un nombre de ruta que comienza con un guión . Digamos que quiere saber la historia de un archivo que tiene el desafortunado nombre "--follow":git log --follow -p -- --follow
--
es útil porque también puede proteger contra cualquierrevision
nombre que coincida con el nombre de archivo que ha ingresado, lo que en realidad puede dar miedo. Por ejemplo: si tuviera una rama y un archivo con nombrefoo
,git log -p foo
mostraría el historial de registro de git hastafoo
, no el historial del archivofoo
. Pero @DanMoulding tiene razón en que, dado que el--follow
comando solo toma un solo nombre de archivo como argumento, esto es menos necesario ya que no puede ser unrevision
. Acabo de enterarme de eso. Tal vez tenías razón al dejarlo fuera de tu respuesta entonces; No estoy seguro.Si prefiere permanecer basado en texto, puede usar tig .
Instalación rápida:
# apt-get install tig
$ brew install tig
Úselo para ver el historial en un solo archivo:
tig [filename]
O explore el historial detallado de repositorios:
tig
Similar a
gitk
pero basado en texto. Soporta colores en terminal!fuente
tig -- path/to/specific/file
git whatchanged -p filename
También es equivalente agit log -p filename
en este caso.También puede ver cuándo se cambió una línea de código específica dentro de un archivo
git blame filename
. Esto imprimirá un ID de confirmación breve, el autor, la marca de tiempo y la línea de código completa para cada línea del archivo. Esto es muy útil después de que hayas encontrado un error y quieras saber cuándo se introdujo (o quién tiene la culpa).fuente
filename
no es opcional en el comandogit blame filename
.Usuarios de SourceTree
Si usa SourceTree para visualizar su repositorio (es gratis y bastante bueno) puede hacer clic derecho en un archivo y seleccionar Log Selected
La pantalla (a continuación) es mucho más amigable que gitk y la mayoría de las otras opciones enumeradas. Desafortunadamente (en este momento) no hay una manera fácil de iniciar esta vista desde la línea de comandos: la CLI de SourceTree actualmente solo abre repositorios.
fuente
Para mostrar qué revisión y autor modificaron por última vez cada línea de un archivo:
o si quieres usar la poderosa GUI de culpa:
fuente
Resumen de otras respuestas después de leerlas y jugar un poco:
El comando de línea de comando habitual sería
Pero también puede usar gitk (gui) o tig (text-ui) para obtener formas mucho más legibles para los humanos de verlo.
En debian / ubuntu, el comando de instalación para estas herramientas encantadoras es el esperado:
Y actualmente estoy usando:
para que pueda escribir
gdf dir
para obtener un historial enfocado de todo en el subdirectoriodir
.fuente
--all
es para todas las ramas, el resto se explica en la respuesta de @ DanAgregue este alias a su .gitconfig:
Y usa el comando así:
La salida se verá casi exactamente igual a la salida de gitk. Disfrutar.
fuente
git lg -p filename
: devuelve una hermosa diferencia de archivo buscado.Últimamente descubrí
tig
y lo encontré muy útil. Hay algunos casos que desearía que hiciera A o B, pero la mayoría de las veces es bastante ordenado.Para su caso,
tig <filename>
podría ser lo que está buscando.http://jonas.nitro.dk/tig/
fuente
Puedes usar vscode con GitLens , es una herramienta muy poderosa. Después de instalar GitLens, vaya a la pestaña GitLens, seleccione
FILE HISTORY
y podrá explorarlo.fuente
Escribí git-play para este propósito exacto
Esto tiene la ventaja de que ambos muestran los resultados en la línea de comando (me gusta
git log -p
) y al mismo tiempo le permiten recorrer cada confirmación utilizando las teclas de flecha (me gustagitk
).fuente
O:
gitx -- <path/to/filename>
si estás usando gitx
fuente
También puede probar esto, que enumera las confirmaciones que han cambiado una parte específica de un archivo (Implementado en Git 1.8.4).
El resultado devuelto sería la lista de confirmaciones que modificaron esta parte en particular. Comando:
donde upperLimit es el número_línea_inicial y el Límite inferior es el número_línea_final del archivo.
Más detalles en https://www.techpurohit.com/list-some-useful-git-commands
fuente
Si desea ver el historial completo de un archivo, incluso en todas las demás ramas, use:
fuente
Con las excelentes extensiones de Git , vas a un punto en el historial donde el archivo todavía existía (si se ha eliminado, de lo contrario solo ve a HEAD), cambia a la
File tree
pestaña, haz clic derecho en el archivo y eligeFile history
.Por defecto, sigue el archivo a través de los cambios de nombre, y la
Blame
pestaña permite ver el nombre en una revisión dada.Tiene algunos problemas menores, como mostrar
fatal: Not a valid object name
en laView
pestaña al hacer clic en la revisión de eliminación, pero puedo vivir con eso. :-)fuente
Si está utilizando la GUI de git (en Windows) en el menú Repositorio, puede usar "Visualizar el historial del maestro". Resalte una confirmación en el panel superior y un archivo en la esquina inferior derecha y verá la diferencia de esa confirmación en la esquina inferior izquierda.
fuente
SmartGit :
fuente
La respuesta que estaba buscando que no estaba en este hilo es ver cambios en los archivos que había preparado para confirmar. es decir
fuente
git diff origin/master
para mostrar las diferencias completas entre su sucursal local y la sucursal maestra (que se puede actualizar desde la remotagit fetch
)Si usa TortoiseGit, debería poder hacer clic derecho en el archivo y hacerlo
TortoiseGit --> Show Log
. En la ventana que aparece, asegúrese de:'
Show Whole Project
' la opción no está marcada.'
All Branches
' la opción está marcada.fuente
git diff -U <filename>
darte una diferencia unificada.Debe ser de color rojo y verde. Si no es así, ejecute:
git config color.ui auto
primero.fuente
Si está utilizando eclipse con el complemento git, tiene una excelente vista de comparación con el historial. Haga clic derecho en el archivo y seleccione "comparar con" => "historial"
fuente
Probablemente esté sobre dónde estaba el OP cuando esto comenzó, buscando algo simple que me permitiera usar git difftool con vimdiff para revisar los cambios en los archivos en mi repositorio a partir de una confirmación específica. No estaba muy contento con las respuestas que estaba encontrando, así que elaboré este script de git inc remental rep orter (gitincrep) y me ha sido útil:
Llamado sin argumentos, esto comenzará desde el comienzo del historial de repositorios, de lo contrario comenzará con cualquier hash abreviado de confirmación que proporcione y proceda al presente: puede presionar Ctrl-C en cualquier momento para salir. Cualquier argumento después del primero limitará los informes de diferencias para incluir solo los archivos enumerados entre esos argumentos (lo que creo que es lo que quería el OP, y lo recomendaría para todos menos los proyectos pequeños). Si está verificando cambios en archivos específicos y desea comenzar desde el principio, deberá proporcionar una cadena vacía para arg1. Si no eres un usuario de vim, puedes reemplazar vimdiff con tu herramienta de diferencias favorita.
El comportamiento es generar los comentarios de confirmación cuando se encuentran cambios relevantes y comenzar a ofrecer ejecuciones de vimdiff para cada archivo modificado (ese es el comportamiento de git difftool , pero funciona aquí).
Este enfoque es probablemente bastante ingenuo, pero al examinar muchas de las soluciones aquí y en una publicación relacionada, muchas implicaron instalar nuevas herramientas en un sistema donde no tengo acceso de administrador, con interfaces que tenían su propia curva de aprendizaje. El script anterior hizo lo que quería sin tener que lidiar con nada de eso. Examinaré las muchas sugerencias excelentes aquí cuando necesite algo más sofisticado, pero creo que esto responde directamente al OP.
fuente
He encontrado una solución muy simple para encontrar rápidamente el historial del archivo.
Mostraría la historia de todos los commits.
fuente