2013-08-08 21 views
20

Le pagine di manuale git-diff dice che git diff viene utilizzato perDifferenza tra un commit git e la directory di lavoro?

Mostra solo le modifiche tra l'albero di lavoro e l'indice o un albero, cambia tra l'indice e un albero, cambiamenti tra due alberi, o modifiche tra due file sul disco.

Ma che dire se si desidera mostrare la differenza tra un commit prima di HEAD e la directory di lavoro? È possibile?

risposta

27

Sì, ma dipende un po 'dalla definizione su quale sia lo "stato corrente del progetto". Il manuale per git diff continua.

Se siete interessati a confronto con il in scena modifiche:

git diff [--options] --cached [<commit>] [--] [<path>...] 

Questo modulo è per visualizzare le modifiche in scena per la prossima impegnarsi rispetto al nome <commit>. In genere si desidera il confronto con l'ultimo commit, quindi se non si fornisce <commit>, per impostazione predefinita HEAD. Se HEAD non esiste (ad es. Rami non abbinati) e non viene fornito <commit>, mostra tutte le modifiche graduali. --staged è un sinonimo di --cached.

Se siete interessati a confronto con i unstaged modifiche:

git diff [--options] <commit> [--] [<path>...] 

Questo modulo è per visualizzare le modifiche che avete nel vostro albero di lavoro relativo al nome <commit>. È possibile utilizzare HEAD per confrontarlo con l'ultimo commit o il nome di un ramo da confrontare con il tip di un ramo diverso.

Oppure, se siete solo interessati a confrontare eventuali due commit (uno potrebbe essere il capo):

git diff [--options] <commit> <commit> [--] [<path>...] 

Questo è quello di visualizzare le modifiche tra due arbitrarie <commit> s.

Così si potrebbe desiderare di eseguire git diff someOldCommit HEAD per vedere le differenze tra someOldCommit e l'attuale capo.

+1

Con "lo stato attuale del progetto" mi riferivo alla directory di lavoro, so che era un po 'diffuso. Ho aggiornato la mia domanda. – HelloGoodbye

+2

Grazie per la risposta. Quindi, 'git diff [--options] [-] [ ...]' era quello che stavo cercando allora. Nel mio caso, poiché non ho bisogno di usare alcuna opzione, e ho solo bisogno di ottenere differenze all'interno del percorso corrente, per me questo si riduce a 'git diff .' – HelloGoodbye

+1

O, beh, poiché voglio diff l'intero repository, e non sono sicuro che sia nella directory di primo livello, avrei bisogno di 'git diff '. Da uno script questo sarebbe 'git diff " $ (git rev-parse --show-toplevel) "'. – HelloGoodbye

Problemi correlati