2012-04-20 11 views
66

Angenommen, Ihre git commit Geschichte sieht wie folgt aus:Git: Wie Liste auf dieser Zweig verpflichtet, aber nicht aus fusionierte Filialen

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

Ist es möglich, git Liste haben nur die Commits auf Master, A-F? Mit anderen Worten, wenn das Commit in einem eingebundenen Zweig war, möchte ich es nicht anzeigen.

+1

Also, wie würde git wissen, welche von 'D' und' Z' Teil des zusammengeschlossenen Zweiges war? – Romain

+1

Beim Zusammenführen aus dem Master sind vorherige Master-Commits die ersten übergeordneten Elemente, die zusammengeführt werden. Mit 'git log' können nur die Commits mit' --first-parent' angezeigt werden, damit Sie die richtigen Sachen bekommen. – CharlesB

+0

möglich duplicate of [Wie kann ich Git Log ausführen, um Änderungen nur für eine bestimmte Branche anzuzeigen?] (http://stackoverflow.com/questions/4649356/how-do-irun-git-log-to-see-changes-only-for-a-specific-branch) –

Antwort

94

git log hat Option --first-parent, so dass Sie bekommen nicht topic Geschichte.

Bei der Zusammenführung von master sind die master Commits die ersten Eltern in Merge. Git Log erlaubt nur die Commits mit --first-parent anzuzeigen, damit Sie die richtigen Sachen bekommen.

+15

+1 '--first-parent' macht es :) kombiniert mit' --no-merges' können Sie die Merge-Commits ausblenden – c00kiemon5ter

+1

Das funktioniert erstaunlich mit 'tig' https://github.com/jonas/tig –

-2

Funktioniert das nicht?

git log master 
git log --stat master 
+0

Nein, das funktioniert nicht. Das Zusammenführungs-Commit hat zwei Eltern; Alles, was von diesen beiden Eltern zurückverfolgt wird, befindet sich im 'Master' Zweig. – GoZoner

16

Es ist eine weitere allgemeine Art und Weise, um dies zu, die nicht auf --first-parent angewiesen ist, die in bestimmten Situationen hilfreich sein .. die Zweigausschlussfilter mit

git log origin/topic ^origin/master Dies Sie alle ein Protokoll der origin/topic geben von origin/master Commits entfernt.

Sie könnten auch in --no-merges hinzufügen, die Merge-Commits verbergen wird, die Sie wollen oder nicht wollen.

Ein weiterer praktischer Tipp ist die Verwendung von shortlog anstelle von log, was Ihnen mehr von einer abgekürzten Zusammenfassung gibt, die für Versionshinweise oder die Kommunikation von Whats in einer Filiale nützlich sein kann.

aktualisieren
Danach erneut zu lesen, Sie würden tatsächlich fast die Umkehrung der will, was ich geschrieben; Es würde jedoch am Ende alles ausschließen, was auf Master und Foo (git log origin/master ^origin/foo) ist. Sie könnten aber auch bekommen, wonach Sie fragen (verstecken Sie alle Commits, die Teil von Merges sind) mit git log origin/master --no-merges