Git zeigt alle Zweige (aber keine Verstecke) im Protokoll

84

Ich habe einen Git-Alias, der erweitert wird zu:

git log --graph --oneline --all --decorate

Demnach man git loggibt es ein paar verdächtige Optionen: --notund --branches; aber ich kann es nicht richtig funktionieren lassen.

Wie soll ich das bearbeiten, um die Verstecke zu verbergen?


Zu Ihrer Information : Gemäß der akzeptierten Frage und dem akzeptierten Kommentar.gitconfig sieht mein Alias ​​jetzt so aus:

[alias]
    l = log --branches --remotes --tags --graph --oneline --decorate --notes HEAD
cYrus
quelle

Antworten:

125

Anstatt zu --allversuchen, die Verstecke herauszufiltern, schließen Sie sie niemals an erster Stelle ein:

git log --branches --remotes --tags --graph --oneline --decorate

Das Hauptproblem, das sich aus dem Versuch ergibt, sie anschließend herauszufiltern, besteht darin, dass der Stash, wenn er das letzte Commit für diesen Zweig ist (obwohl er nicht headder Zweig ist, aber immer noch der jüngste Nachkomme davon ist), tatsächlich herausgefiltert werden kann der gesamte Zweig aus dem Protokoll, was nicht das ist, was Sie wollen.

Andrew Marshall
quelle
2
Toll! Ich würde der --tagsVollständigkeit halber hinzufügen .
cYrus
Ich würde vermuten --tags, redundant zu sein, da kein Tag jemals ein Nachkomme headeines Zweigs oder einer Fernbedienung sein sollte, obwohl ich dies nicht überprüft habe.
Andrew Marshall
3
Ich habe es gerade versucht : git checkout -b test; ein Commit hinzugefügt; git tag foo;; git checkout master;; git branch -D test. Das Tag ist vorhanden, wird jedoch nicht ohne angezeigt --tags.
cYrus
2
Eine kleine Ergänzung - Sie sollten HEADam Ende hinzufügen . Andernfalls wird es im Diagramm nicht angezeigt, wenn Sie sich im getrennten HEAD-Modus befinden und kein anderer Verweis auf das HEAD-Commit verweist.
mziwisky
6

Mein Alias:

[alias]
    l = log --oneline --decorate --graph --exclude=refs/stash

In diesem Fall können Sie diese Formulare verwenden, ohne den Vorrat anzuzeigen:

  • git l für den aktuellen Zweig
  • git l feature234 für einen bestimmten Zweig
  • git l --all für die gesamte Geschichte

Aus dem Handbuch:

--exclude = <Glob-Muster>

Fügen Sie keine passenden Refs hinzu, die die nächsten --all, --branches, --tags, --remotes oder --glob andernfalls berücksichtigen würden.

fünf
quelle
4
Beachten Sie, dass die Reihenfolge der Parameter von Bedeutung ist: --all --exclude=refs/stashDer Stash wird weiterhin eingeschlossen, während er --exclude=refs/stash --allkorrekt ausgeschlossen wird.
Mikhail Burshteyn
4

Beachten Sie, dass Andrew Antwort würde nicht für das Verstecken arbeiten stgit 1.) Zweige <branch>.stgit(von stgit Version 0.15) , die sonst verunreinigen den Ausgang macht es unbrauchbar.

Derzeit verwende ich die folgende Lösung:

$ git log --graph --oneline --decorate \
  $(git for-each-ref --format="%(refname)" refs/heads/ refs/remotes/ |
    grep -v "\.stgit$")

1.) StGit (" St acked Git ") bietet Git Quilt / mq-ähnliche Funktionen (dh das Verschieben / Poppen von Patches zu / von einem Stapel).

Jakub Narębski
quelle
Erwägen Sie die Verwendung --exclude. Wie:git log --graph --exclude=refs/heads/*.stgit --exclude=refs/patches/* --exclude=refs/stash --all
Gavenkoa