2011-03-10 12 views
20

Voglio vedere la differenza tra il ramo principale e il mio ramo di funzionalità. Ho molte richieste dal master al mio ramo delle funzionalità e voglio vedere le modifiche che verrebbero aggiunte se unissi la mia funzione al master.git diff non mostra abbastanza

Questa è la mia situazione:

-*--*--*-----*<master> 
    \  \  \ 
    1--*--*--*--2--*<feature> 

Il mio problema è il git diff master feature sembra visualizzare solo impegnarsi numero 2. Voglio vedere la diff che una richiesta di pull github avrebbe mostrato, che credo sia tutto il senso per commettere 1. Ho notato che git cherry mi mostra i commit per cui voglio vedere la differenza.

Grazie per qualsiasi consiglio.

risposta

113

La cosa importante da realizzare su git diff A B è che mostra sempre e solo la differenza tra gli stati dell'albero tra esattamente due punti nel grafico di commit: non interessa la cronologia. I .. e ... notazioni utilizzate per git diff hanno il seguente significato:

An illustration of the different ways of specifying commits for git diff

Quindi, quando si esegue git diff master feature che non è solo voi che mostrano la modifica introdotta dal commettere che hai contrassegnato come 2 - l'uscita dovrebbe mostrare la differenze esatte tra lo stato dell'albero commesso in master e lo stato dell'albero commesso in feature. Se non ti mostra le modifiche precedenti sul tuo ramo delle funzionalità, forse hai risolto i conflitti delle precedenti fusioni dal master a favore della versione in master?

Come cebewee says Può essere che ciò che si vuole è git log -p master..feature, dal momento che git logfa cura di storia. Il significato di .. e ... per git log sono diversi poiché selezionare un intervallo di commit:

An illustration of the different ways of specifying ranges of commits for git log

Per inciso, la sua spesso detto che la fusione da master in un ramo argomento è la cosa sbagliata da fare - invece si dovrebbe effettuare una ridefinizione o unire il ramo dell'argomento in master al termine. Ciò consente di comprendere facilmente il significato del ramo dell'argomento. Il manutentore di git ha fatto un post sul blog (un po 'difficile da capire) su the philosophy of merging che ne discute.

+2

Tuttavia, il post sul blog collegato fa dire che in una situazione in cui la succursale non figura più si fonde perfettamente nel 'master' una corretta linea di azione è quello di fondere' master' nella funzione branch e risoluzione dei conflitti sul ramo della funzione. – Plasma

+0

Grazie per il link alla filosofia della fusione. Stavo leggendo quello e non ho potuto scoprire il nome dell'autore, solo che lui è il maitrein. Conosci il suo nome? - Modificato: non importa. Il suo nome è Junio ​​C Hamano. Tx –

6

git diff master feature non mostra nessuno dei "commit" ma la differenza testuale tra il master e la funzione di commit. Sembra che tu voglia vedere tutti i commit dalla funzione, che non sono ancora nel master? In questo caso, prova git log master..feature o git log -p master..feature, se vuoi vedere anche le differenze.

Vedere la sezione GESTIONE DEI CAMPI in man git-rev-parse per una spiegazione della sintassi 'a..b'.

1

Sono relativamente nuovo da git, ma se ho capito bene la tua domanda. La tua domanda è stata presa da non correttamente comprendendo i repository remoti e locali e come si relazionano tra loro. Ricordo che una volta capito, tutto divenne più facile 2X.

È pensa si è in questa situazione sotto dove si hanno solo 2 rami:

  • featureBranch
  • masterBranch

Eppure, se si fa un git branch -a si sarà in grado di vedere all delle filiali, locale e remoto.

Così il vostro reale situazione è:

  • featureBranch
  • masterBranch
  • remoteBranch (s)
*---* <remote's Master> which is behind your local 
     \ 
     -*--*--*-----*<master> which is ahead of your remote/origin 
     \  \  \ 
     1--*--*--*--2--*<feature> 

Al fine per voi di essere in grado di vedere il diff simile a quello che si vede in Github Pull Request è necessario diff con il vostro ramo remota.

git diff <local branch> <remote>/<remote branch> 

Vedi compare local git branch with remote branch?