Mostra i commit effettuati direttamente su un ramo, ignorando le unioni in Git


87

Quando si usa git, c'è un modo per mostrare i commit fatti a un ramo, ignorando tutti i commit che sono stati portati dall'unione?

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

Risposte:


124

--no-merges

Entrambi i genitori hanno lo stesso peso in molti contesti in git. Se sei sempre stato coerente nell'unire altre modifiche, potresti scoprire che questo ti dà ciò che desideri.

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

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

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

Se vuoi rivedere le modifiche che stai per unire di nuovo in un ramo principale, la cosa più semplice da fare è eseguire l'unione su un clone locale e quindi guardare il diff con il primo genitore prima di pubblicare l'unione.


Questo primo comando è eccellente in "branch-per-feature appropriato " ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Adam Dymitruk

1
Sembra che ricevo principalmente commit da quel ramo, ma mostra ancora i commit che sono stati estratti dal master. Abbiamo così tanti rami che escluderne altri sarebbe poco pratico.
Channel Cat

@ChannelCat, perché non ribasare il tuo ramo sull'altro, quindi tutti i commit saranno alla fine?
Mark Ingram

7

Puoi usare git cherryper quello, ti troverà commit che non sono stati ancora uniti all'upstream, o commit che si trovano su un ramo ma non sull'altro. Quindi dati due rami chiamati "tuo-ramo" e "master":

git cherry -v your-branch master

ti presenterà un elenco di commit confrontati con il loro ID patch:

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

Puoi notare che i commit con prefisso "-" sono quelli che compaiono in entrambi i rami, mentre quelli con prefisso "+" sono disponibili solo sul tuo ramo.

In alternativa puoi utilizzare:

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

che ti mostrerà l'elenco dei commit effettuati su "tuo-ramo" che non sono ancora presenti su "master"


Poiché il mio tentativo di modificare la tua risposta è stato rifiutato, lo posterò qui: nella tua ultima riga git, dovrebbero esserci tre punti, non due, tra i nomi dei rami. In questo modo: your-branch ... master
vedranm

@vedranm Non hai bisogno di 3 punti, solo due ... anche se 3 funziona nello stesso modo in cui 2 funziona.
Zzzach ...

4

Un modo molto hacker:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.