Ausgabe des Git-Zweigs in baumartiger Weise

160

Im Moment, wenn ich "git branch" eingebe

Es listet meine Filialen in beliebiger Reihenfolge auf.

Was ich bevorzugen würde, wäre, wenn "git branch" meine Ausgabe in einem Baum wie fasion auflistet, so etwas wie:

master
|-- foo
  |-- foo1
  |-- foo2
|-- bar
  |-- bar4

Wo hier, foo & bar wurden vom Meister verzweigt; foo1 & foo2 wurden von foo verzweigt; bar4 wurde von bar verzweigt.

Ist das leicht zu erreichen?

[Nur Befehlszeilenprogramme. Dies muss in meinen zsh / vim-Workflow passen.]

anon
quelle
Keine der Antworten hier (meine eigene eingeschlossen) scheint eine adäquate Lösung für das zu bieten, was ich denke, dass Sie wirklich wollen und für das, was ich weiß, dass ich will. Ich werde ein neues Dienstprogramm schreiben, um dieses Problem zu lösen, wenn ich die Gelegenheit dazu bekomme. Wird es wahrscheinlich nennen git_tree. Es wird so etwas wie arc flowhier ausgegeben : stackoverflow.com/questions/54227968/… . Vielleicht kann ich es eines Tages sogar in Git selbst verschmelzen lassen.
Gabriel Staples
Diese Person scheint dasselbe zu wollen: reddit.com/r/git/comments/282c1f/…
Gabriel Staples
git log --graphist genug, denke ich.
DawnSong vor

Antworten:

203

Die Antwort unten verwendet git log:

Ich erwähnte einen ähnlichen Ansatz im Jahr 2009 mit " Ein Git-Baum kann im Terminal nicht angezeigt werden ":

git log --graph --pretty=oneline --abbrev-commit

Die vollständige Version, die ich verwendet habe, finden Sie in " So zeigen Sie den Tag- und Zweigstellennamen mit git log --graph an " (2011):

git config --global alias.lgb "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit --date=relative --branches"

git lgb

Ursprüngliche Antwort (2010)

git show-branch --list kommt dem nahe, wonach Sie suchen (mit der Topo-Bestellung)

--topo-order

Standardmäßig werden die Zweige und ihre Commits in umgekehrter chronologischer Reihenfolge angezeigt.
Mit dieser Option werden sie in topologischer Reihenfolge angezeigt (dh Nachkommen-Commits werden vor ihren Eltern angezeigt).

Aber auch das Tool git wtf kann helfen . Beispiel:

$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] (edwardzyang@...; 7 days ago)
Remote branch: origin/master ([email protected]:sup/mainline.git)
[x] in sync with local

Feature branches:
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead)
    - bump to 0.8.1 [dab43fb] (wmorgan-sup@...; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
    - put labels before subject in thread index view [790b64d] (marka@...; 4 weeks ago)
{x} origin/enclosed-message-display-tweaks merged in
(x) experiment merged in (only locally)

NOTE: working directory contains modified files

git-wtf zeigt Dir:

  • Wie sich Ihre Filiale auf das Remote-Repo bezieht, wenn es sich um eine Tracking-Filiale handelt.
  • Wie sich Ihr Zweig auf Zweige ohne Feature ("Version") bezieht, wenn es sich um einen Feature-Zweig handelt.
  • Wie sich Ihr Zweig auf die Feature-Zweige bezieht, wenn es sich um einen Versionszweig handelt
VonC
quelle
Verwenden Sie eine Variante Ihres hübschen Formats, in der auch die E-Mail des Autors mit% ae angezeigt wird. Außerdem rufe ich den Alias ​​lieber mit "sl" auf, um dem Smartlog von hg zu ähneln.
Fiorix
Vielen Dank für den Link zum git-wtfTool, es ist wahnsinnig nützlich. Scheint die Schlussfolgerungen, die ich aus dem Starren auf einen schicken git logBaum ziehen würde, im Wesentlichen zu brechen , aber in einer schönen Zusammenfassung.
Luke Davis
Ich hatte gehofft, einen Weg zu finden, damit die Kasse zeigen sollte, aus welcher Filiale sie ausgecheckt wurde
Chang Zhao
@ChangZhao Das ist ähnlich wie "Finden des übergeordneten Zweigs", und das ist nicht einfach: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC
147

Es ist nicht ganz das, wonach Sie gefragt haben, aber

git log --graph --simplify-by-decoration --pretty=format:'%d' --all

macht einen ziemlich guten Job. Es werden auch Tags und Remote-Zweige angezeigt. Dies ist möglicherweise nicht für alle wünschenswert, aber ich finde es nützlich. --simplifiy-by-decorationist hier der große Trick, um die gezeigten Refs zu begrenzen.

Ich verwende einen ähnlichen Befehl, um mein Protokoll anzuzeigen. Ich konnte meine gitkVerwendung vollständig ersetzen :

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

Ich benutze es, indem ich diese Aliase in meine ~ / .gitconfig-Datei einbinde:

[alias]
    l = log --graph --oneline --decorate
    ll = log --graph --oneline --decorate --branches --tags
    lll = log --graph --oneline --decorate --all

Bearbeiten: Die vorgeschlagenen Protokollbefehle / Aliase wurden aktualisiert, um einfachere Optionsflags zu verwenden.

kein Bargeld
quelle
1
IMO ist dies die beste Antwort hier, aber ich denke, SourceTree oder Gitk oder ähnliches ist der richtige Weg für diese Art von Dingen.
JaKXz
Dies zeigt die Zweige am Ursprung an. Gibt es eine Möglichkeit, dies für die lokalen Niederlassungen anzuzeigen?
Jeff
@ Jeff Ersetzen --alldurch --branches --tagswürde es wahrscheinlich tun.
Nocash
perfekte Antwort. Was ich gesucht habe, habe ich hier gefunden. Toll.
AMIC MING
12

Das folgende Beispiel zeigt auch engagierte Eltern:

git log --graph --all \
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset'
Ben
quelle
10

Sie können ein Tool namens verwenden gitk.

Vladimir Prudnikov
quelle
Ich liebe Gitk, aber ich habe es gitkauf dem Mac nicht herausgefunden . Wenn Sie einen Vorschlag haben, lassen Sie es mich bitte wissen. Ich habe angefangen, Github Desktopaber ich liebe es, an der Kommandozeile zu arbeiten.
AMIC MING
6

Getestet auf Ubuntu:

sudo apt install git-extras
git-show-tree

Dies erzeugt einen ähnlichen Effekt wie die 2 am besten bewerteten Antworten hier.

Quelle: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


Wenn Sie einen Arkanisten installiert haben (Korrektur: Ubers Gabel des Arkanisten installiert - Installationsanweisungen finden Sie unten in dieser Antwort hier ), arc flowwird ein schöner Abhängigkeitsbaum der vorgelagerten Abhängigkeiten angezeigt (dh: die zuvor über arc flow new_branchoder manuell über festgelegt wurden git branch --set-upstream-to=upstream_branch).

Bonus Git Tricks:

Verbunden:

  1. Was ist der Unterschied zwischen "Arc Transplant" und "Arc Patch"?
Gabriel Staples
quelle
-1

Für diejenigen, die Github verwenden, gibt es einen Branch Network Viewer , der leichter zu lesen scheint

kip2
quelle