Verzweigungshierarchie in der Befehlszeile anzeigen?

80

Ich bin gespannt, ob es eine Möglichkeit gibt, die Verzweigungshierarchie in der Befehlszeile anzuzeigen. Zum Beispiel, wenn ich verwende git branch, anstatt die Ausgabe wie folgt zu sehen:

* master
joes_work
refactoring
experiment

Sie sehen die Ausgabe wie folgt:

* master
    joes_work
    refactoring
        experiment

Auf diese Weise ist leicht zu erkennen, von welchem ​​Zweig ein bestimmter Zweig abzweigt. Auch wenn es keinen bestimmten Befehl gibt, der eine Baumstruktur ausgibt, gibt es einen Befehl, der Informationen darüber ausgibt, welcher Zweig von welchem ​​Zweig stammt? Ich kann ein Perl-Skript verwenden, um die Ausgabe zu formatieren.

Mellowsoon
quelle
Die Frage hat nichts mit der Beziehung zwischen Commits und nur Zweigen zu tun. Sie können 5 Zweige haben, die auf nicht verwandte Commits verweisen, die dennoch ein Diagramm in Bezug auf ihren vorgelagerten Zweig bilden. Ich glaube nicht, dass es eine Möglichkeit gibt, die Antwort vom Git Cli zu bekommen.
Todd befreit

Antworten:

115

Die Lösung von sehe sieht gut aus. Hier ist eine andere, die ähnliche Informationen zu enthalten scheint, anders formatiert ist. Sie verwendet das Git-Protokoll und enthält daher auch Commit-Informationen (ignorieren Sie die Zweignamen, ich habe sie irgendwie durcheinander gebracht!):

git log --all --graph --decorate --oneline --simplify-by-decoration

* ae038ad (HEAD, branch2-1) add content to tmp1
| * f5a0029 (branch2-1-1) Add another
|/  
* 3e56666 (branch1) Second wave of commits
| * 6c9af2a (branch1-2) add thing
|/  
* bfcf30a (master) commit 1
ctcherry
quelle
Ja - ich bevorzuge das eigentlich, weil es flexibler ist, aber es von meinem Telefon aus zu
tippen
2
@sehe: du kannst einen Alias ​​daraus machen. Ich habe einen ähnlichen Git-Log-Alias, der wirklich nett ist, und ich alias es zu lg, also git lg.
Jorge Israel Peña
Danke ctcherry, das ist wirklich nützlich (zum zweiten Mal habe ich es gebraucht). Ich würde dir noch eine Stimme geben, wenn ich könnte.
Rocky Sims
5
Nett! Ich benutze git config --global alias.tree 'log --all --graph --decorate --oneline --simplify-by-decoration'was mir gibt git tree.
Chetbox
28

Versuchen

git show-branch
git show-branch --all

Beispielausgabe:

bash$ git show-branch --all
! [branchA] commitA only in branchA
 * [branchB] commitB
  ! [branchC] commitC only in branchC
---------------------
+   [branchA] commitA only in branchA 
 *  [branchB] commitB
  + [branchC] commitC only in branchC
 *+ [branchC~1] commitB-1 also in branchC
 *+ [branchC~2] commitB-2 also in branchC
+++ [branchC~3] common ancestor
+++ [branchC~4] more common ancestors
sehe sehen
quelle
4
git show-branchZeigt Commits in Zweigen an, nicht nur eine Liste von Zweigen.
Svick
1
Ich bin mir nicht sicher, ob ich das suche. Es scheint Commits in Zweigen anzuzeigen, aber ich suche nach einer Möglichkeit, eine Baumansicht aller Zweige zu sehen.
Mellowsoon
Der Baum wird von unten nach oben gezeichnet, nicht von links nach rechts, aber es ist in Ordnung. Wo ein Zweig gebrochen zu sein scheint, fehlt dort ein Commit. Beachten Sie auch, dass ein Commit in einem Zweig fehlen kann, obwohl es ansonsten mit einem anderen Zweig identisch ist. Wenn Sie also nur die Namen der Zweige anzeigen, wird dies zu stark vereinfacht.
Tripleee
25

Ich möchte die Antwort von @ctcherry vervollständigen.

Ich mag es, wenn ich auch den Benutzer sehen kann, der das Commit ausgeführt hat, und das Datum. Dies ist also die folgende Zeile:

git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Dies ist jedoch eine ziemlich lange Zeile und schwer zu merken, sodass Sie einen Alias ​​verwenden können. Sie müssen dies nur in Ihrem Terminal verwenden:

git config --global alias.lg "HERE GOES MY BIG LOG COMMAND LINE"


Um zusammenzufassen, kopieren Sie die folgende Zeile und fügen Sie sie in Ihr Terminal ein:

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

Dann müssen Sie nur noch verwenden git lg, um Ihren Protokollverlaufsbaum abzurufen.

Beispiel: Geben Sie hier die Bildbeschreibung ein

src

Caribouflex
quelle
1
Danke, dass du einer Antwort etwas Farbe gegeben hast!
dsz
13

Schreib einfach gitk command ein und drücken Sie die Eingabetaste.

Für mich gitkist das die einfachste Lösung dafür. Obwohl der Befehlsmodus nicht angezeigt wird, wird automatisch eine schöne Benutzeroberfläche wie die folgende ausgefüllt:

Geben Sie hier die Bildbeschreibung ein

Arif
quelle
5

So funktionieren Zweige aus Git-Sicht nicht. Wenn ich mich zum Verzweigen verpflichte a, erstelle ich einen Zweig bdaraus, arbeite dort und mache dann wieder andere Arbeiten an a:

A -- B -- D <-- a
       \
        \
          C <-- b

Das ist nicht zu unterscheiden, wenn Sie es umgekehrt gemacht haben:

A -- B -- C <-- b
       \
        \
          D <-- a

Der einzige Weg, den ich mir vorstellen kann, um herauszufinden, aus welchem ​​Zweig ein bestimmter Zweig stammt, ist das Reflog, aber das ist unzuverlässig (Einträge, die älter als 90 Tage sind, werden normalerweise gelöscht).

svick
quelle
Wissen Sie, ob dies für die Dateien in .git / logs / refs / Heads gilt? Dort befindet sich für jeden Zweig eine Datei, und in der ersten Zeile des Zweigs steht, aus welchem ​​Zweig dieser Zweig stammt.
Mellowsoon
-2

Wie wäre es mit diesem Alias ​​für Ihre .gitconfig:

[alias]
branch-tree = !cd "$(git rev-parse --git-dir)/refs/heads" && tree

Sie können auch Optionen angeben, je nachdem, was Ihr treeBefehl unterstützt, z. B. -Dfür Zeitstempel.

Peter Eisentraut
quelle
1
Dies ist nur eine beschissene Version von git branch. Die Frage möchte etwas, das die Verzweigungshierarchie zeigt - von der eine Verzweigung verzweigt usw.
Duncan Lock