Pregunta Ver el historial de cambios de un archivo con el control de versiones de Git


¿Cómo puedo ver el historial de cambios de un archivo individual en Git, completar los detalles 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 puedo obtener el contenido de cada uno de los cambios?

Estoy tratando de hacer la transición de MS SourceSafe y que solía ser un simple right-click → show history.


2502
2017-11-10 15:42


origen


Respuestas:


Para esto usaría:

gitk [filename]

o para seguir el nombre del archivo pasado cambia de nombre

gitk --follow [filename]

1947
2017-08-24 12:05



Puedes usar

git log -p filename

para dejar que git genere los parches para cada entrada de registro.

Ver

git help log

para obtener más opciones, en realidad puede hacer muchas cosas buenas :) Para obtener solo la diferencia para una confirmación específica, puede

git show HEAD 

o cualquier otra revisión por identificador. O usar

gitk

para examinar los cambios visualmente


1832
2017-11-10 15:56



git log --follow -p -- file

Esto mostrará el todo historial del archivo (incluida la historia más allá de los cambios de nombre y con diferencias para cada cambio).

En otras palabras, si el archivo se llama bar una vez fue nombrado foo, entonces git log -p bar (sin el --follow opción) solo mostrará el historial del archivo hasta el momento en que se renombró: no mostrará el historial del archivo cuando se lo conocía como foo. Utilizando git log --follow -p bar mostrará el historial completo del archivo, incluidos los cambios al archivo cuando se lo conocía como foo. los -p La opción asegura que se incluyan diffs para cada cambio.


1184
2018-03-30 23:25



Si prefiere permanecer basado en texto, es posible que desee utilizar tig.

Instalación rápida:

  • apt-get: # apt-get install tig 
  • Homebrew (OS X): $ brew install tig

Úselo para ver el historial en un solo archivo: tig [filename]
O navegue por la historia detallada del repositorio: tig

Similar a gitk pero basado en texto Admite colores en la terminal!


146
2018-06-07 10:23



git whatchanged -p filename también es equivalente a git log -p filename en este caso.

También puede ver cuándo se cambió una línea específica de código dentro de un archivo con git blame filename. Esto imprimirá una identificación corta de confirmación, el autor, la marca de tiempo y la línea completa de código para cada línea en el archivo. Esto es muy útil después de que hayas encontrado un error y quieras saber cuándo se introdujo (o quién tuvo la culpa).


101
2017-11-11 06:12



Usuarios de SourceTree

Si usa SourceTree para visualizar su repositorio (es gratis y bastante bueno) puede hacer clic derecho en un archivo y seleccionar Registro seleccionado

enter image description here

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.

enter image description here


91
2017-07-30 18:55



Para mostrar qué revisión y autor modificaron por última vez cada línea de un archivo:

git blame filename

o si quieres usar la potente GUI GUI:

git gui blame filename

56
2017-08-11 13:01



Resumen de otras respuestas después de leerlas y reproducir un poco:

El comando de línea de comando habitual sería

git log --follow --all -p dir/file.c

Pero también puedes usar gitk (gui) o tig (text-ui) para obtener formas mucho más legibles de verlo.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

En debian / ubuntu, el comando de instalación para estas hermosas herramientas es el esperado:

sudo apt-get install gitk tig

Y actualmente estoy usando:

alias gdf='gitk --follow --all -p'

para que solo pueda escribir gdf dir obtener una historia enfocada de todo en subdirectorio dir.


39
2017-12-05 18:38



Agregue este alias a su .gitconfig:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

Y usa el comando de esta manera:

> git lg
> git lg -- filename

La salida se verá casi exactamente igual a la salida de gitk. Disfrutar.


22
2018-06-26 20:12