Git: So listen Sie Commits für diesen Zweig auf, jedoch nicht für zusammengeführte Zweige

86

Angenommen, Ihr Git-Commit-Verlauf sieht folgendermaßen aus:

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

Ist es möglich, dass die Git-Liste nur die Commits auf Master, AF enthält? Mit anderen Worten, wenn sich das Commit in einem zusammengeführten Zweig befand, möchte ich nicht, dass es angezeigt wird.

wch
quelle
2
Also, wie würde Git wissen, welcher von Dund ZTeil des fusionierten Zweigs war?
Romain
2
Beim Zusammenführen vom Master sind frühere Master-Commits die ersten Eltern, die zusammengeführt werden. git logerlaubt es, nur die Commits mit anzuzeigen --first-parent, damit Sie das richtige Zeug bekommen
CharlesB

Antworten:

131

git loghat Option --first-parent, so dass Sie keine topicGeschichte bekommen .

Beim Zusammenführen von mastersind die masterCommits die ersten Eltern, die zusammengeführt werden. Mit dem Git-Protokoll können nur die Commits mit --first-parent angezeigt werden, sodass Sie das richtige Material erhalten.

CharlesB
quelle
25
+1 --first-parentmacht es :) in Kombination mit können --no-mergesSie die Zusammenführungs-Commits
ausblenden
Ich habe gestimmt, aber es scheint immer noch übertrieben im Vergleich zu meiner Antwort
UpAndAdam
22

TLDR : git log origin/master --no-mergesgibt Ihnen ein Protokoll des Masters und schließt alle zusammengeführten Commits aus (in diesem Fall x, y, z).

Ursprüngliche Punkte

Es gibt einen anderen allgemeinen Weg, der nicht davon abhängt, --first-parentwelcher in bestimmten Situationen hilfreich ist. Verwenden Sie die Zweigausschlussfilter

git log origin/topic ^origin/master Dadurch erhalten Sie ein Protokoll, in dem origin/topicalle origin/masterCommits entfernt wurden.

Sie können auch hinzufügen, --no-mergeswelche Zusammenführungs-Commits ausgeblendet werden, die Sie möglicherweise möchten oder nicht.

Ein weiterer praktischer Tipp ist, shortlogstattdessen logeine abgekürzte Zusammenfassung zu verwenden, die für Versionshinweise oder die Kommunikation der Inhalte in einem Zweig nützlich sein kann.

Update
Nachdem Sie dies erneut gelesen haben, möchten Sie tatsächlich fast das Gegenteil von dem, was ich gepostet habe. es würde jedoch alles ausschließen, was sich auf master und foo ( git log origin/master ^origin/foo) befindet. Sie können jedoch auch das bekommen, wonach Sie fragen (alle Commits ausblenden, die Teil von Zusammenführungen sind)git log origin/master --no-merges

UpAndAdam
quelle
-3

Funktioniert das nicht

git log master
git log --stat master
Stefan Kendall
quelle
Nein, die funktionieren nicht. Das Merge-Commit hat zwei Eltern. Alles, was von diesen beiden Elternteilen zurückverfolgt wird, befindet sich in der Hauptniederlassung.
GoZoner