2011-12-15 13 views
64

Quando si usa git, c'è un modo per mostrare commit fatta ad un ramo, ignorando tutti i commit che sono stati portati in fondendo?Mostrando impegna i fatta direttamente ad un ramo, ignorando si fonde in Git

Sto provando a rivedere le modifiche al codice apportate su un ramo ignorando quelle che abbiamo fatto su altri rami che sono stati uniti. So che è quasi impossibile mostrare un diff in quel modo, ma mi piacerebbe essere in grado di scoprire quali commit devo rivedere.

risposta

90

Entrambi i genitori hanno lo stesso peso in molti contesti in git. Se sei sempre stato coerente nel fondere altre modifiche allora potresti scoprire che questo ti dà quello che vuoi.

git log --no-merges --first-parent 

Altrimenti potresti essere in grado di escludere i commit dagli altri rami denominati.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3 

Se si desidera rivedere le modifiche che si sta per fondersi di nuovo in un ramo principale allora la cosa più semplice da fare è quello di eseguire la stampa su un clone locale e poi basta guardare il diff con il primo genitore prima di pubblicare l'unione.

+0

Questo primo comando è eccellente in "corretta ramo-per-feature" (https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR) –

+1

sembra come se ottengo impegna per lo più da quel ramo, ma è ancora mostrando commit che sono stati tirati dal master. Abbiamo così tanti rami che escludere gli altri sarebbe poco pratico. –

+0

@ChannelCat perché non rebase la filiale sull'altra, poi tutti i commit saranno alla fine? –

3

Un modo molto hacker:

git log --graph --oneline --no-merges thebranch|grep '^\*'

5

È possibile utilizzare git cherry per questo, vi troverà impegna che non erano ancora fuse al monte, o commette che si trovano su un ramo ma non l'altro . Quindi, dato due rami denominato "il tuo ramo" e "maestro":

git cherry -v your-branch master 

vi presenterà la lista dei commit rispetto alla loro patch di id:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme 
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting 
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake 

Si può notare che impegna il prefisso "- "sono quelli che appaiono in entrambi i rami, mentre quelli con il prefisso" + "sono disponibili solo sul tuo ramo.

In alternativa è possibile utilizzare:

git log --pretty=format:"%h %s" your-branch..master --no-merges 

che vi mostrerà la lista dei commit fatto sul "tuo-branch" che non sono ancora presenti sul "master"

Problemi correlati