git diff due file sullo stesso ramo, stesso commit


97

scusa se questa domanda esiste, sorprendentemente non sono riuscita a trovarla: /

Come posso eseguire uno git difftra due file all'interno dello stesso ramo e stesso commit?

cioè git diff fileA.php fileB.php

(idealmente con il codice colore di facile lettura che gitoffre ... o simile a quello che fa il programma BeyondCompare!)


Nota: Git: come diffondere due file diversi in commit diversi? è leggermente più generale di questa domanda, ma la risposta è essenzialmente la stessa della risposta corretta a questa , e non ha tutte quelle risposte fasulle, quindi ho votato per chiuderla come un duplicato.
SamB

Risposte:


84

Non hai bisogno di git per questo, usa diff fileA.php fileB.php(o vimdiff se vuoi un confronto fianco a fianco)


22
vimdiffper la vittoria! Grazie!
d -_- b

24
Può funzionare, ma non è git diff. È un formato di output completamente diverso.
daboross

11
Questo non risponde alla domanda originale
DylanYoung

8
Non sono d'accordo, l'OP non era chiaro ma il fatto che menzionasse BeyondCompare implica che non stia cercando specificamente un git diffdiff ma semplicemente un diff facile da leggere. Anche il fatto che abbia accettato la mia risposta come ciò che stava cercando indica anche che in realtà risponde.
JaredMcAteer

3
leggi attentamente la risposta. il comando diff fileA fileBnon ègit diff fileA fileB
Matthew Hinea

247

Se vuoi usare git diffsu due file arbitrari puoi usare git diff --no-index <file_a> <file_b>. Non è necessario tenere traccia dei due file gitaffinché funzioni.


32
+1 in quanto risponde alla domanda iniziale (indipendentemente dal "perché dovresti farlo" ... ci possono essere ragioni)
NobodysNightmare

19
--word-diffevidenzia le modifiche per parola, non solo per riga
user3148949

2
Per quelli di noi che utilizzano PowerShell, questo è un modo molto più semplice per ottenere una differenza di due file in un repository.
Jay Soyer

2
In che modo questa eccellente risposta è elencata di seguito 2 risposte precedenti, con meno voti (e meno utili) quando si ordina per "attivo" ??? Non sto nemmeno contando la risposta contrassegnata come corretta. Comunque grazie!
j_random_hacker

@daboross In GNU diffutils 3.4+ (2016-08-08), diffha --color, che potrebbe aiutare (vedere unix.stackexchange.com/a/338960 ). Ma anche in questo caso, se si utilizza diff-so-fancy, sembra richiedere il formato di output specifico di git diff. diff -u(vedi stackoverflow.com/a/4857407/10095231 ) non funziona.
kelvin

14

Se i file che vuoi confrontare sono nella tua copia di lavoro, puoi usarli semplicemente diffcome indicato dagli altri, tuttavia se i file sono in qualche revisione puoi specificare una revisione per ogni file

git diff <revision_1>:<file_1> <revision_2>:<file_2>

come indicato qui: https://stackoverflow.com/a/3343506/1815446

Nel tuo caso (specificando la stessa revisione per entrambi i file):

git diff <revisionX>:fileA.php <revisionX>:fileB.php

Nota: una revisione può essere HEAD~2, un SHA-1, un nome di filiale, ecc.
ma11hew28

Questo ha funzionato per me, confrontando solo i nomi di file da due directory diverse: git diff --name-only HEAD:dir1 HEAD:dir1_backup funziona dopo una git adddi entrambe le directory.
Frank Forte

1
Funziona se la revisione non viene estratta nell'albero di lavoro, o i file dell'albero di lavoro vengono modificati e si desidera diff gli originali, o se non c'è affatto un albero di lavoro, come in un semplice repository git. È un peccato che questa domanda molto apprezzata abbia risposte molto apprezzate che rispondono a una domanda ancora utile, ma piuttosto diversa, "come posso ottenere un output simile a git-diff senza usare git?"
TrentP

4

Per rendere gnu diff regolare più simile a git diff, consiglierei questi parametri:

diff -burN file_or_dir1 file_or_dir2

(dove -bignora gli spazi, -udiff unificato, -rricorsivo, -Ntratta i file mancanti come /dev/null).

Funziona alla grande, ma non ha ancora i colori e l'auto-paging in stile git è praticamente assente. Se vuoi aggiustare entrambi (lo faccio), installalo colordiffe usalo in questo modo:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Ciò fornisce un output e un'interfaccia molto vicini all'effettivo git diff.


4
-1, perché "non è possibile" non è corretto (vedi: stackoverflow.com/a/13965200/968531 )
NobodysNightmare

Rimuovi il "non puoi", aggiungi le istruzioni per l'installazione di colordiff e questa potrebbe essere una risposta corretta alla domanda originale.
DylanYoung


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.