2012-05-09 12 views
8

Come si può trovare il commit di unione precedente tra due rami?Come trovare il commit unione precedente

Mi piacerebbe vedere le modifiche nel mio ramo principale dall'ultima volta che ho fuso il ramo di rilascio nel ramo principale. Per vedere le modifiche nel ramo di rilascio dall'ultimo ramo, è facile come git diff ...release

Ma ovviamente git diff release... non funziona perché include anche tutte le modifiche prima dell'ultima unione. Così Penso di aver bisogno l'id commettere degli ultimi merge per passarlo a git diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
     --format=format:%H|head -n1 

sembra funzionare e può essere utilizzato con git diff $(...), ma sembra terribilmente complicato. C'è una soluzione più semplice?

Esempio

I 
/\ 
A1 B1 
\ | 
| M 
| | 
A2 B2 

Qui I è l'iniziale commit. A[12] vengono rilasciati il ​​rilascio e B[12] sono i commit principali. M è il commit precedente. Nell'esempio le modifiche tra l'ultima fusione e master sono solo le modifiche introdotte da B2. git merge-base A2 B2 restituisce A 1. E git diff B2 A1 include le modifiche di B1. Quindi la domanda è come trovare M nel caso generale più complesso in modo che si possa eseguire git diff M B2 senza dover trovare manualmente M.

+0

Questo non è il modo più efficiente, ma è possibile consultare 'git log --graph --oneline' per trovare il commit. – Shahbaz

risposta

-1

Questo mostrerà l'ultima fusione commettere tra il ramo foo e padrone ramo

git log foo master --oneline --date-order --merges -1 

--oneline is just to keep the output short 
--date-order to get the latest first 
--merges to only show merge commits 
-1 to display the first result only 
+3

Questo comando sembra darmi l'ultima unione in entrambi i rami. Ciò include l'unione di master o foo con qualcos'altro. Ma mi piacerebbe avere l'ultima fusione di foo con il master non con qualsiasi altra cosa. –

+0

Questo comando è utile per ottenere l'ultima unione da un ramo se si registra solo un ramo: git log master --oneline [...] –

6

Sembra quello che stai cercando è il punto in cui i due rami hanno cominciato a differenziarsi, non l'ultima fusione tra i due rami. Questi due concetti sono diversi perché il ramo di rilascio potrebbe essere stato inoltrato rapidamente qualche tempo dopo la fusione.

git merge-base master release troverà l'antenato più recente del master e rilascia i rami (ovvero l'ultimo commit che i due hanno in comune).

Poi, il maestro è possibile utilizzare git diff [common ancestor] HEAD per vedere le modifiche che sono state apportate al padrone in quanto l'antenato comune.

+0

Ho aggiunto un esempio alla domanda per mostrare perché 'git merge-base' di stesso non sta risolvendo il problema. –

+0

@Roland Shulz Capisco. Proverò a trovare una risposta diversa –

Problemi correlati