2012-04-20 20 views
66

Supponiamo che il vostro git commit storia assomiglia a questo:Git: come lista impegna su questo ramo, ma non dai rami uniti

A---B---C---D---E---F master 
    \  /
     X---Y---Z topic 

E 'possibile avere l'elenco git solo i commit sul maestro, A-F? In altre parole, se il commit era su un ramo unito, non lo voglio mostrare.

+1

Quindi, come si può sapere quale di 'D' e' Z' faceva parte del ramo unito? – Romain

+1

Quando uniti dal master, i precedenti commit principali sono i primi genitori in unione. 'git log' permette di visualizzare solo quei commit con' --first-parent', in modo da ottenere il file giusto – CharlesB

+0

possibile duplicato di [Come faccio a eseguire Git Log per vedere le modifiche solo per un ramo specifico?] (http://stackoverflow.com/questions/4649356/how-do-i-run-git-log-to-see-changes-only-for-a-specific-branch) –

risposta

94

git log ha l'opzione --first-parent, quindi non sarà possibile ottenere topic storia.

Quando uniti da master, i commit master sono i primi genitori in unione. Git log consente di visualizzare solo quei commit con --first-parent, quindi ottieni le cose giuste.

+15

+1 '--first-parent' :): combinato con' --no-merges' puoi nascondere l'unione commette – c00kiemon5ter

+1

Questo funziona in modo sorprendente con 'tig' https://github.com/jonas/tig –

-2

Non funziona?

git log master 
git log --stat master 
+0

No quelli non funzionano. Il commit unione ha due genitori; tutto il rintracciamento da entrambi i genitori è sul ramo "master". – GoZoner

16

C'è un altro modo generale per andare su questo che non si basa su --first-parent che sarà utile in determinate situazioni .. utilizzando i filtri di esclusione ramo

git log origin/topic ^origin/master Questo vi darà un log di origin/topic con tutti I commit di origin/master vengono rimossi.

potresti anche aggiungere --no-merges che nasconderà i commit di unione che potresti o non vorresti.

Un altro suggerimento utile è quello di utilizzare shortlog anziché log che ti darà più di un sommario abbreviato che può essere utile per le note di rilascio o la comunicazione di cosa è in un ramo.

Aggiornamento
Dopo aver ri-lettura di questo, in realtà si vorrebbe quasi l'inverso di quello che ho postato; tuttavia finirà per escludere tutto ciò che è su master e foo (git log origin/master ^origin/foo). Tuttavia puoi anche ottenere quello che chiedi (nascondi tutti i commit che fanno parte delle fusioni) con git log origin/master --no-merges

Problemi correlati