Mostrare quali file sono stati modificati tra due revisioni

Voglio unire due rami che sono stati separati per un po ‘e volevo sapere quali file sono stati modificati.

È venuto attraverso questo link: http://linux.yyz.us/git-howto.html che è stato abbastanza utile.

Gli strumenti per confrontare i rami che ho incontrato sono:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Stavo chiedendo se c’è qualcosa come “git status master..branch” per vedere solo quei file che sono diversi tra i due rami.

Senza creare un nuovo strumento, penso che questo sia il più vicino che puoi ottenere ora (che ovviamente mostrerà le ripetizioni se un file è stato modificato più di una volta):

  • git diff master..branch | grep "^diff"

Mi stavo chiedendo se ci fosse qualcosa che mi mancava …

Per confrontare il ramo corrente con il master

 $ git diff --name-status master 

Per confrontare qualsiasi coppia di rami

 $ git diff --name-status firstbranch..yourBranchName 

Questo dovrebbe fare ciò di cui hai bisogno, se ti capisco correttamente.

Provare

 $ git diff --stat --color master..branchName 

Ciò ti fornirà maggiori informazioni su ogni modifica, pur utilizzando lo stesso numero di linee.

Puoi anche capovolgere i rami per ottenere un’immagine ancora più chiara della differenza se dovessi unire l’altro modo:

 $ git diff --stat --color branchName..master 

Ricorda inoltre che git ha diramazioni economiche e facili. Se penso che una fusione potrebbe essere problematica creo un ramo per l’unione. Quindi se il master ha le modifiche che voglio unire e ba è il mio ramo che ha bisogno del codice dal master, potrei fare quanto segue:

 git checkout ba git checkout -b ba-merge git merge master .... review new code and fix conflicts.... git commit git checkout ba git merge ba-merge git branch -d ba-merge git merge master 

Il risultato finale è che ho avuto modo di provare l’unione su un ramo da buttare via prima di scopare con il mio ramo. Se riesco ad aggrovigliare, posso semplicemente eliminare il ramo ba-merge e ricominciare da capo.

Se qualcuno sta provando a generare un file diff da due rami:

 git diff master..otherbranch > myDiffFile.diff 

Nota che git rende facile provare l’unione e allontanarti da qualsiasi problema se non ti piace il risultato. Potrebbe essere più facile che cercare in anticipo potenziali problemi.

C’è anche un metodo basato sulla GUI.

Puoi usare gitk .

  1. Correre:

     $ gitk --all 
  2. Fai clic destro su un commit di un ramo e seleziona Contrassegna questo commit nel menu a comparsa.

  3. Fai clic destro su un commit di un altro ramo e seleziona Diff this -> marked commit o Diff marked commit -> this .

Poi ci sarà un elenco di file modificati nel pannello in basso a destra e dettagli diff nel pannello in basso a sinistra.

Un’altra opzione, usando la combinazione in questo caso:

 git difftool -d master otherbranch 

Ciò consente non solo di vedere le differenze tra i file, ma offre anche un modo semplice per puntare e fare clic su un file specifico.

Quando si lavora in modo collaborativo o su più funzioni contemporaneamente, è normale che l’upstream o anche il master contengano lavori non inclusi nel proprio ramo e che vengano visualizzati in modo non corretto nelle differenze di base.

Se il tuo Upstream potrebbe essersi spostato, dovresti fare questo:

 git fetch git diff origin/master... 

L’uso di git diff master può includere o non includere modifiche rilevanti.

E se stai cercando cambiamenti solo tra determinati file, allora:

 git diff branch1 branch2 -- myfile1.js myfile2.js 

branch1 è facoltativo e il tuo ramo corrente (il ramo su cui ti trovi) sarà considerato di default se branch1 non è fornito. per esempio:

 git diff master -- controller/index.js 

Se si utilizza IntelliJ IDEA , è anche ansible confrontare qualsiasi ramo con il proprio ramo di lavoro corrente. Vedi http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 per maggiori informazioni. Questo è disponibile anche nella versione gratuita .

Ci sono due rami che diciamo

  • A (Branch su cui stai lavorando)
  • B (Un altro ramo con cui si desidera confrontare)

Essere nel ramo A puoi digitare

 git diff --color B 

allora questo ti darà un risultato

inserisci la descrizione dell'immagine qui

Il punto importante su questo è

  1. Il testo in verde è presente all’interno del ramo A

  2. Il testo in rosso è presente nel ramo B

Ci sono molte risposte qui, ma volevo aggiungere qualcosa che uso comunemente. Se ti trovi in ​​una delle filiali che vorresti confrontare, di solito esegui una delle seguenti azioni. Per il bene di questa risposta diremo che siamo nel nostro ramo secondario. A seconda di quale vista hai bisogno al momento dipenderà da quale scegli, ma la maggior parte delle volte sto usando la seconda opzione dei due. La prima opzione può essere utile se si sta tentando di tornare a una copia originale – in entrambi i casi, entrambi completano il lavoro!

Questo confronterà il master con il ramo in cui ci troviamo (che è secondario) e il codice originale sarà le linee aggiunte e il nuovo codice sarà considerato come le linee rimosse

 git diff ..master 

O

Questo confronterà anche il master con il ramo in cui ci troviamo (che è secondario) e il codice originale sarà le vecchie linee e il nuovo codice saranno le nuove linee

 git diff master.. 

Se ti piace la GUI e stai usando Windows, ecco un modo semplice.

  1. Scarica WinMerge
  2. Dai un’occhiata ai due rami in diverse cartelle
  3. Confrontare una cartella per cartella con WinMerge. È anche ansible apportare facilmente modifiche se uno dei rami è quello su cui si sta lavorando.

Puoi anche confrontare facilmente i rami per i file modificati usando, ad esempio, TortoiseGit . Basta fare clic su Sfoglia riferimenti e selezionare i rami che si desidera confrontare.

Ad esempio, se confronti il tuo ramo con il master , otterrai come risultato l’elenco dei file che verranno modificati in master se decidi di unire il tuo branch in master .

Ricorda che avrai un risultato diverso se confronti il master con il tuo ramo e il tuo ramo con il master .