Ver el historial de cambios de un file con el control de versiones de Git

¿Cómo puedo ver el historial de cambios de un file 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 file, pero ¿cómo puedo get 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-clickshow history .

Para esto usaría:

 gitk [filename] 

o para seguir el nombre del file pasado cambia de nombre

 gitk --follow [filename] 

Puedes usar

 git log -p filename 

para dejar que git genere los parches para cada input de logging.

Ver

 git help log 

para get más opciones, en realidad puede hacer muchas cosas buenas 🙂 Para get 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

git log --follow -p -- file

Esto mostrará el historial completo del file (incluido el historial más allá de los cambios de nombre y con diferencias para cada cambio).

En otras palabras, si el file llamado bar alguna vez se llamó foo , entonces git log -p bar (sin la opción --follow ) solo mostrará el historial del file hasta el punto donde fue renombrado – no mostrará el file Historial del file cuando se lo conocía como foo . Usando git log --follow -p bar mostrará el historial completo del file, incluyendo cualquier cambio al file cuando se lo conoce como foo . La opción -p asegura que se incluyan diffs para cada cambio.

Si prefiere permanecer basado en text, puede usar 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 file: tig [filename]
O navega por la historia detallada de los repos: tig

Similar a gitk pero basado en text. Admite colors en la terminal!

git whatchanged -p filename es también equivalente a git log -p filename de 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 file con el git blame filename . Esto imprimirá una identificación corta de confirmación, el autor, la timestamp y la línea completa de código para cada línea en el file. 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).

Usuarios de SourceTree

Si utiliza SourceTree para visualizar su repository (es gratuito y bastante bueno) puede hacer clic con el button derecho en un file y seleccionar Log Selected

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 command-line: la CLI de SourceTree actualmente solo abre repositorys.

enter image description here

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

 git blame filename 

o si quieres usar la poderosa GUI GUA:

 git gui blame filename 

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

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

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

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

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

En debian / ubuntu, el command de installation 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 pueda simplemente escribir gdf dir para get un historial enfocado de todo en subdirectory dir .

Agregue este alias a su .gitconfig:

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

Y usa el command de esta manera:

 > git lg > git lg -- filename 

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

O:

gitx -- <path/to/filename>

si estás usando gitx

Escribí git-playback para este propósito exacto

 pip install git-playback git playback [filename] 

Esto tiene la ventaja de mostrar los resultados en la línea de command (como git log -p ) y al mismo time permitirle pasar por cada confirmación usando las teclas de flecha (como gitk ).

Si desea ver el historial completo de un file, incluso en todas las demás twigs, use:

 gitk --all <filename> 

Con las excelentes extensiones de Git , vaya a un punto en el historial donde el file aún existió (si se ha eliminado, de lo contrario solo vaya a HEAD), cambie a la pestaña del File tree , haga clic derecho en el file y elija File history .

De forma pnetworkingeterminada, sigue el file a través de los cambios de nombre, y la pestaña Blame permite ver el nombre en una revisión determinada.

Tiene algunos inconvenientes menores, como mostrar fatal: Not a valid object name en la pestaña View onclick en la revisión de eliminación, pero puedo vivir con eso. 🙂

Si está utilizando la GUI de git (en Windows) en el menu del repository, puede usar "Visualizar el historial del maestro". Resalta una confirmación en el panel superior y un file en la esquina inferior derecha y verás la diferencia para esa confirmación en la esquina inferior izquierda.

Últimamente descubrí tig y me pareció muy útil. Hay algunos casos en los que desearía que fuera A o B, pero la mayoría de las veces es bastante limpio.

Para su caso, tig <filename> puede ser lo que está buscando.

http://jonas.nitro.dk/tig/

Si utilizas TortoiseGit, deberías poder hacer clic derecho en el file y hacer TortoiseGit --> Show Log . En la window que aparece, asegúrese de:

  • Show Whole Project opción ' Show Whole Project ' no está marcada.

  • La opción ' All Branches ' está marcada.

La respuesta que estaba buscando que no estaba en este hilo es ver los cambios en los files que había organizado para confirmar. es decir

 git diff --cached 

También puede probar esto que enumera las confirmaciones que han cambiado una parte específica de un file (Implementado en Git 1.8.4).

El resultado devuelto sería la list de confirmaciones que modificaron esta parte en particular. El command es como:

 git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename> 

donde upperLimit es el número de línea de inicio y lowerLimit es el número de línea de finalización del file.

SmartGit :

  1. En el menu, habilite la visualización de files sin cambios: Ver / Mostrar files sin cambios
  2. Haga clic derecho en el file y select 'Iniciar session' o presione 'Ctrl-L'

Si está utilizando eclipse con el plugin git, tiene una excelente vista de comparación con el historial. Haga clic con el button derecho en el file y select "comparar con" => "historial"

git diff -U <filename> te da una diferencia unificada.

Debería ser coloreado en rojo y verde. Si no es así, ejecute: git config color.ui auto primero.