Come confrontare i file di due diversi rami?

Ho uno script che funziona bene in un ramo ed è rotto in un altro. Voglio guardare le due versioni fianco a fianco e vedere cosa c’è di diverso. Ci sono dei modi per farlo?

Per essere chiari non sto cercando uno strumento di confronto (io uso Beyond Compare). Sto cercando un comando git diff che mi permetta di confrontare la versione master con la mia attuale versione di ramo per vedere cosa è cambiato. Non sono nel mezzo di un’unione o altro. Voglio solo dire qualcosa del genere

git diff mybranch/myfile.cs master/myfile.cs 

git diff può mostrarti la differenza tra due commit:

 git diff mybranch master -- myfile.cs 

O, in modo equivalente:

 git diff mybranch..master -- myfile.cs 

Usando la seconda syntax, se entrambi i lati sono HEAD , può essere omesso (es master.. confronta master a HEAD ).

Potresti anche essere interessato a mybranch...master (da git diff docs ):

Questo modulo è per visualizzare le modifiche sul ramo contenente e fino al secondo , a partire da un antenato comune di entrambi . git diff A...B equivale a git diff $(git-merge-base AB) B

In altre parole, questo darà un diff di cambiamenti nel master poiché si è discostato da mybranch (ma senza nuove modifiche da allora in mybranch ).


In tutti i casi, il separatore prima del nome del file indica la fine dei flag della riga di comando. Questo è facoltativo a meno che Git non venga confuso se l’argomento si riferisce a un commit o a un file, ma includerlo non è una ctriggers abitudine da ottenere. Vedere https://stackoverflow.com/a/13321491/54249 per alcuni esempi.


Gli stessi argomenti possono essere passati a git difftool se ne hai uno configurato.

Puoi farlo: git diff branch1:file branch2:file

Se hai difftool configurato, puoi anche: git difftool branch1:file branch2:file

Domanda correlata: Come posso visualizzare l’output diff git con un programma di visualizzazione visiva

Sintassi più moderna:

git diff ..master path/to/file

Il prefisso a due punti significa “dalla directory di lavoro corrente a”. Puoi anche dire:

  • master.. , cioè il contrario di sopra. Questo è lo stesso di master .
  • mybranch..master , che fa esplicitamente riferimento a uno stato diverso dall’albero di lavoro corrente.
  • v2.0.1..master , ovvero referenziamento di un tag.
  • [refspec]..[refspec] , in pratica qualsiasi cosa identificabile come stato del codice da git.

Esistono molti modi per confrontare i file di due diversi rami:

  • Opzione 1: se si desidera confrontare il file da n ramo specifico a un altro ramo specifico:

     git diff branch1name branch2name path/to/file 

    Esempio:

     git diff mybranch/myfile.cs mysecondbranch/myfile.cs 

    In questo esempio si confronta il file nel ramo “mybranch” al file nel ramo “mysecondbranch”.

  • Opzione 2: modo semplice:

      git diff branch1:file branch2:file 

    Esempio:

      git diff mybranch:myfile.cs mysecondbranch:myfile.cs 

    Questo esempio è simile all’opzione 1.

  • Opzione 3: se vuoi confrontare la tua attuale directory di lavoro con qualche ramo:

     git diff ..someBranch path/to/file 

    Esempio:

     git diff ..master myfile.cs 

    In questo esempio si confronta il file dal ramo attuale al file nel ramo principale.

Semplicemente do git diff branch1 branch2 path/to/file

Questo controlla le differenze tra i file. Le modifiche nel branch1 sarebbero in rosso. Le modifiche nel branch2 sarebbero in verde.

Si presume che branch1 sia il passato e branch2 sia il futuro. Puoi invertirlo invertendo l’ordine dei rami nella diff: git diff branch2 branch1

Accettando la risposta suggerita da @dahlbyk. Se si desidera che il diff sia scritto su un file diff per le revisioni del codice, utilizzare il seguente comando.

 git diff branch master -- filepath/filename.extension > filename.diff --cached 

Il modo migliore per farlo è usare git diff nel modo seguente: git diff -- file_path

Verificherà la differenza tra i file in quei rami. Dai un’occhiata a questo articolo per maggiori informazioni sui comandi git e su come funzionano.

Per confrontare due file in git bash devi usare il comando:

 git diff ..master -- Filename.extension 

Questo comando mostrerà la differenza tra i due file nella bash stessa.