2012-04-05 18 views
23
  1. Dato this answer ad un'altra domanda, e
  2. dato che le pagine man sia per git-log e git-whatchanged dicono di tirare da git-rev-list ...

... qual è allora la differenza tra i due comandi ? Perché preoccuparsi di averli entrambi?Differenza tra git-log e git-whatchanged?

+2

Un recente commit (agosto 2013) ora chiarisce la differenza tra i due comandi e incoraggia ad utilizzare solo 'git log'. Vedi [la mia risposta sotto] (http://stackoverflow.com/a/18585297/6309) – VonC

risposta

19

Il commit 52f425e1 (30 agosto 2013) cita:

incoraggiare i nuovi utenti di utilizzare 'log' invece. Al giorno d'oggi questi comandi sono unificati e hanno solo valori di default diversi.

'git log' consentito solo per visualizzare i messaggi di registro e non diff quando è stato aggiunto all'inizio di giugno 2005. È stato solo all'inizio di aprile 2006 che il comando ha imparato a prendere le opzioni di diff.
Per questo motivo, gli utenti esperti tendevano a utilizzare "whatchanged" già esistente a partire da metà maggio 2005 e supportate opzioni di diff.


Questo è ciò che il new version of the man page for git whatchanged diranno ora:

I nuovi utenti sono incoraggiati ad utilizzare git log invece. Il comando whatchanged è essenzialmente uguale a git log ma il valore predefinito mostra l'output diff del formato raw e ignora le unioni.

Il comando viene mantenuto principalmente per ragioni storiche; le dita di molte persone che hanno imparato Git molto prima che lo git log sia stato inventato leggendo la mailing list del kernel di Linux sono state addestrate a digitarlo.

+2

Grazie per essere tornato e averlo aggiunto. In generale, penso che tutta la comunità git sia molto grata per te, Charles Bailey, Jakub Narębski e chiunque altro abbia dedicato molto tempo alle domande di git su SO :). –

13

Nella loro forma più semplice, 'git log' mostra ogni commit (sha, autore, data, messaggio) mentre 'git whatchanged' mostra i file commit più modificati. Ad esempio:

$ 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 

ma per 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 

sacco di opzioni esistono per cambiare l'output di ogni comando. Ad esempio 'git whatchanged -p' mostra le modifiche nella forma diff/patch.

+0

Grazie. C'è qualche funzionalità che un comando può fare che l'altro semplicemente non può? –

+2

Sembra che la risposta sia "no". Guardando il codice sorgente git si vede che i due sono identici a parte le opzioni predefinite. 'git log' mostrerà 'intestazione sempre'; 'git whatchanged' sempre 1) mostra l'output diff, 2) semplifica la cronologia e 3) usa un formato diff crudo di default. – GoZoner

+2

'git-whatchanged' non include le fusioni di default mentre' git-log' fa. Non ho trovato le opzioni, se ce ne sono, per ottenere 'git-log' per mostrare l'elenco dei file modificati allo stesso modo di' git-whatchanged'. –

3

Non sono completamente d'accordo. Riesci a vedere unire i file modificati con log?

non ho trovato questa funzionalità ed è molto utile per sapere quando un file è stato fuso in qualche ramo, ad esempio:

file c.c in branch1 ha una data di impegnarsi da 1/1/2012, se si fa unire a branch2 e in seguito si desidera seguire il giorno in cui è stato introdotto il commit in branch2, può l'aiuto git log? Se si hanno le unioni è possibile cercare in esse con git whatchanged -m sha1