Git: Come diff due file diversi in rami diversi?


170

Ho due file diversi in diversi rami. Come posso differli in un comando?

Qualcosa di simile a

# git diff branch1/foo.txt branch2/foo-another.txt

Potrei controllare l'altro file, diffrarlo e ripristinarlo, ma questa è una soluzione piuttosto sporca.


3
@EugenKonkov Non è un duplicato perché questa domanda sta chiedendo come diff differenti file in diversi rami. La domanda collegata chiede solo come diff lo stesso file in rami diversi.
Steve

Risposte:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

Puoi anche usare percorsi relativi:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
Eccezionale! Non sono stato certamente in grado di dedurlo da git help diff. A proposito, questi non devono essere nomi di rami prima dei due punti, ma possono essere qualsiasi tipo di riferimenti di commit (ad esempio valori SHA-1).
Steve Jorgensen,

3
Nota importante: Git su Windows richiede che l'intero itempec sia un nome unix. cioè branch1: full \ path \ to \ foo.txt fallisce, mentre branch1: full / path / to / foo.txt funziona bene, così come full \ path \ to \ foo.txt (nessun ramo)
Eris

usare git difftoole quindi rilasciare branch2:e che ti permetterà di modificare un file nell'albero di lavoro corrente (per apportare modifiche branch1)
gMale

Ho provato su Linux con la versione 1.8.3.1 di git, sono consentiti solo percorsi relativi.
Sola Yang,

21

Sidenote: non sono necessari percorsi completi, è possibile iniziare con ./percorsi relativi. Può essere utile a volte.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

Esistono molti modi per confrontare i file da due diversi rami. Per esempio:

  • Se il nome è uguale o diverso:

     git diff branch1:file branch2:file
    

    Esempio:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Solo se il nome è lo stesso e vuoi confrontare la tua directory di lavoro corrente con un ramo:

    git diff ..someBranch path/to/file
    

    Esempio:

    git diff ..branch2 full/path/to/foo.txt
    

    In questo esempio stai confrontando il file dal tuo ramo attuale con il file nel ramo principale.

Puoi controllare questa risposta:

Confronta un file da due diversi rami in Git


1

Risposta off-topic - vedi commenti

Solo per aggiungerlo, trovo che sia una sintassi molto semplice:

git diff <branch1> <branch2> <filepath>

Funziona anche con riferimenti relativi come ad esempio:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
L'OP ha chiesto specificamente "file diversi". La tua risposta riguarda il confronto dello stesso file in due rami diversi.
Etienne Miret,

@EtienneMiret Hai perfettamente ragione, ho perso quel punto importante. Risposta fuori tema.
Romain Valeri,

-1

È possibile specificare un inizio e un intervallo git diffa cui applicare. L'intervallo è indicato con la ..notazione.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

Questo confronta solo lo stesso file in due rami; la domanda riguardava due file diversi in due rami.
Pirano
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.