git diff tra due file diversi


110

In HEAD(l'ultimo commit), ho un file denominato foo. Nel mio attuale albero di lavoro, l'ho rinominato e l'ho baranche modificato.

Voglio git diff fooin HEAD, e barnel mio albero di lavoro corrente.


64
Ho pensato che questa domanda (dal titolo) potrebbe riguardare l'utilizzo di git diff su due file che non sono necessariamente in un repository. Ho scoperto che il flag --no-index è per questo, ad esempio git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff evidenzia i cambiamenti per parola, non solo per riga, il che è molto utile per il testo lungo).
Pat

Risposte:


135

Specificare i percorsi in modo esplicito:

git diff HEAD:full/path/to/foo full/path/to/bar

Controlla l' --find-renamesopzione nei git-diff documenti .

Credito: twaggs .


9
Voglio menzionare che puoi confrontare due file qualsiasi usando git diff <path> <path>anche se non si trovano in un repository git.
mitenka

1
@mitenka Non penso che sia corretto. Se guardi git diff --helpvedrai che gli unici modelli supportati per due file sono git diff [<options>] --no-index [--] <path> <path>. git diff a bcorrisponde solo ai modelli di commit, non ai file.
Doug

@Doug Ecco la citazione dal comando di aiuto che hai citato, git-scm.com/docs/git-diff : Mostra le [...] modifiche tra due file su disco.
mitenka

@mitenka dice la guida, a meno che non usi '--no-index' non confronta i file; il tuo commento dovrebbe essere una risposta separata; non è vero e non è rilevante per questa risposta.
Doug

1
@Doug Grazie per la tua opinione. Ecco la citazione dalla guida a cui fai riferimento: Puoi omettere l' --no-indexopzione quando esegui il comando in un albero di lavoro controllato da Git e almeno uno dei percorsi punti all'esterno dell'albero di lavoro, o quando esegui il comando al di fuori di un albero di lavoro controllato da Git .
mitenka

77

Credo che l'utilizzo --no-indexsia quello che stai cercando:

git diff [<options>] --no-index [--] <path> <path>

come menzionato nel manuale git:

Questo modulo serve per confrontare i due percorsi dati sul filesystem. È possibile omettere l' --no-indexopzione quando si esegue il comando in un albero funzionante controllato da Git e almeno uno dei percorsi punti all'esterno dell'albero di lavoro, o quando si esegue il comando all'esterno di un albero funzionante controllato da Git.


1
@swe questa è sicuramente una risposta utile, ma l'OP ha dichiarato specificamente che il file è in HEAD, il che significa che è in un indice git. La risposta accettata affronta direttamente la domanda. Anche la risposta accettata ha avuto un vantaggio di 6 anni;)
Michael Delgado

3
Questo potrebbe non aver aiutato OP, ma era esattamente quello che stavo cercando.
thislooksfun

Questo risponde alla domanda posta dal titolo, se ti stessi schivando per questo sul web.
Merlin

3

Se stai usando tortoise git puoi fare clic con il tasto destro su un file e git un diff facendo clic con il tasto destro sul primo file e attraverso il sottomenu tortoisegit seleziona "Diff in seguito" Quindi sul secondo file puoi anche fare clic destro su questo , vai al sottomenu tortoisegit e quindi seleziona "Diff with yourfilenamehere.txt"


-12

Usando PhpStorm, copio semplicemente il codice prev commit e lo confronto con la versione corrente usando lo strumento "confronta con appunti" incorporato.


5
PhpStorm è un IDE commerciale. Questa domanda riguarda come farlo all'interno dello stesso git cli, senza presunzione di software aggiuntivo.
Charles Taylor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.