2012-04-05 18 views
23
  1. Dada this answer a otra pregunta, y
  2. dado que las páginas del manual para tanto git-log y git-whatchanged dicen que tire de git-rev-list ...

... ¿cuál es entonces la diferencia entre los dos comandos ? ¿Por qué molestarse en tenerlos a ambos?Diferencia entre git-log y git-whatchanged?

+2

Una confirmación reciente (agosto de 2013) ahora aclara la diferencia entre los dos comandos, y alienta a usar solo 'git log'. Ver [mi respuesta a continuación] (http://stackoverflow.com/a/18585297/6309) – VonC

Respuesta

19

El commit 52f425e1 (agosto 30 de 2013) menciona:

alentar a los nuevos usuarios a utilizar 'log' en su lugar. Estos días, estos comandos están unificados y tienen diferentes valores predeterminados.

'git log' solo le permitía ver los mensajes de registro y no diffs cuando se agregó a principios de junio de 2005. Fue solo a principios de abril de 2006 que el comando aprendió a tomar las opciones de diferencia.
Debido a esto, los usuarios avanzados tienden a usar 'whatchanged' que ya existía desde mediados de mayo de 2005 y que soportaba opciones de diferencias.


Eso es lo que el new version of the man page for git whatchanged dirán ahora:

Los nuevos usuarios se les anima a utilizar git log lugar. El comando whatchanged es esencialmente el mismo que git log pero tiene como valor predeterminado mostrar la salida de diff de formato sin formato y omitir las fusiones.

El comando se mantiene principalmente por razones históricas; dedos de muchas personas que aprendieron Git mucho antes de git log se inventó leyendo la lista de correo del kernel de Linux están entrenados para escribirlo.

+2

Gracias por regresar y agregar eso. En general, creo que toda la comunidad git está muy agradecida por ti, Charles Bailey, Jakub Narębski y cualquier otra persona que dedique tanto tiempo a las preguntas sobre git en SO :). –

13

En su forma más simple, 'git log' muestra cada confirmación (sha, autor, fecha, mensaje) mientras que 'git whatchanged' muestra los archivos commit plus que han cambiado. Por ejemplo:

$ git log 
commit db9f525674443314a9822a6bd6c3acce49c8f8d6 
Author: ... 
Date: Wed Apr 4 22:55:33 2012 -0700 

Add more 

commit eed0b7aa3cad5d985b5f1d52f3c0605339c119a1 
Author: ... 
Date: Tue Apr 3 20:36:04 2012 -0700 

del bing/one.c 

pero para WhatChanged:

$ git whatchanged 
commit db9f525674443314a9822a6bd6c3acce49c8f8d6 
Author: ... 
Date: Wed Apr 4 22:55:33 2012 -0700 

Add more 

:100644 100644 f2e4113... d415016... M bar.c 

commit eed0b7aa3cad5d985b5f1d52f3c0605339c119a1 
Author: ... 
Date: Tue Apr 3 20:36:04 2012 -0700 

del bing/one.c 

:100644 000000 e69de29... 0000000... D bing/one.c 

Un montón de opciones existen para cambiar la salida de cada comando. Por ejemplo, 'git whatchanged -p' muestra los cambios en la forma diff/patch.

+0

Gracias. ¿Hay alguna funcionalidad que un comando puede hacer y el otro simplemente no puede? –

+2

Parece que la respuesta es 'no'. Mirar el código fuente de Git muestra que los dos son idénticos aparte de las opciones predeterminadas. 'git log' mostrará 'siempre el encabezado'; 'git whatchanged' siempre 1) mostrará diff output, 2) simplify history y 3) usará un formato raw diff por defecto. – GoZoner

+2

'git-whatchanged' no incluye fusiones por defecto mientras' git-log' sí. No he encontrado las opciones, si hay alguna, para obtener 'git-log' para mostrar la lista de archivos cambiados de la misma manera que' git-whatchanged'. –

3

No estoy totalmente de acuerdo. ¿Puedes ver fusionar archivos cambiados con log?

no he encontrado esta funcionalidad y es muy útil para saber cuando un archivo se fusionó en alguna rama, ejemplo:

file c.c en branch1 tiene una fecha de confirmación desde 1/1/2012, si lo hace una fusión a branch2, y luego le gustaría seguir el día en que se introdujo esa confirmación en branch2, ¿puede git log ayudar? Si usted tiene las fusiones puede buscar en ellos con git whatchanged -m sha1