Ich spiele isoliert mit Git auf meinem eigenen Computer und finde es schwierig, ein mentales Modell aller meiner Zweige und Commits zu pflegen. Ich weiß, dass ich git log
den Commit-Verlauf von meinem Standort aus anzeigen kann. Gibt es jedoch eine Möglichkeit, die gesamte Branchentopographie anzuzeigen, etwa diese ASCII-Karten, die anscheinend überall zur Erklärung von Zweigen verwendet werden?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Es fühlt sich einfach so an, als würde jemand, der mitkommt und versucht, mein Repository abzuholen, Schwierigkeiten haben, genau herauszufinden, was los war.
Ich glaube, ich bin vom Stream-Browser von AccuRev beeinflusst ...
Antworten:
Verwenden Sie
git log --graph
odergitk
. (Beide akzeptieren auch--all
, wodurch alle Zweige anstelle nur des aktuellen angezeigt werden.)Versuchen Sie für Zweigstellennamen und eine kompakte Ansicht:
quelle
--all
Option und beschriftet auch die Commits. Ich habe auch nie in der Dropdown-Liste gesehen, dass Sie dort alle Zweige auswählen können.git log --graph --decorate --oneline
- zeigt ein Commit pro Zeile und verziert mit Zweignamen.--all
Option. Sehr praktisch!--simplify-by-decoration
Option.Ich benutze normalerweise
Mit Farben (wenn Ihre Shell Bash ist):
Dadurch wird eine textbasierte Darstellung wie folgt gedruckt:
(Sie könnten nur verwenden
git log --format=oneline
, aber es wird Commit-Nachrichten an Zahlen binden, was meiner Meinung nach weniger hübsch aussieht).Um eine Verknüpfung für diesen Befehl zu
~/.gitconfig
erstellen , möchten Sie möglicherweise Ihre Datei bearbeiten :Wie Sodel the Vociferous jedoch in den Kommentaren festhält, ist ein derart langer Formatierungsbefehl schwer zu merken. Normalerweise ist dies kein Problem, da Sie es möglicherweise in die
~/.gitconfig
Datei einfügen. Wenn Sie sich jedoch manchmal bei einem Remotecomputer anmelden müssen, auf dem Sie die Konfigurationsdatei nicht ändern können, können Sie eine einfachere, aber schneller einzugebende Version verwenden:quelle
--full-history
ist nur relevant, wenn--simplify-by-decoration
ein Dateipfad verwendet oder angegeben wird.Ich habe 3 Aliase (und 4 Alias-Aliase für die schnelle Verwendung) , die ich normalerweise in meine
~/.gitconfig
Datei einwerfe :git lg
/git lg1
Sieht wie folgt aus :git lg2
sieht aus wie das:und
git lg3
sieht so aus:Es sollte beachtet werden, dass dies nicht als End-All-Be-All-Lösung gedacht ist - es ist eine Vorlage, die Sie nach Ihren Wünschen ändern, ergänzen und korrigieren können. Wenn Sie diese verwenden möchten, empfehle ich:
.gitconfig
,.gitconfig
Zukunft kopieren und in s einfügen können (oder alternativ natürlich die Versionskontrolle Ihrer Punktedateien) .Hinweis: Die Antwort wurde aus der Antwort unter stackoverflow.com/questions/1057564/pretty-git-branch-graphs kopiert und verbessert, da sie hier weitaus angemessener ist als dort. Die Kopie der anderen Frage wurde aus historischen Gründen belassen - sie ist jetzt geschlossen, und auf die Antwort wird durch eine Reihe anderer Antworten verwiesen.
quelle
%C(bold yellow)
mit%C(auto)
für mit unterschiedlichen Farben fürHEAD
, lokale und Remote - Zweige ( ref ).%w()
: Auf diese Weise können Sie auch längere oder mehrzeilige Festschreibungsnachrichten ordnungsgemäß in Zeilenumbrüche umwandeln, ohne das Diagramm zu verfälschen.--abbrev-commit
ist da drin, weil die 2.-3. Zeile von Hand mit Leerzeichen eingerückt ist, und ich wollte unbedingt sicherstellen, dass die kurze SHA verwendet wird - also besser sicher als leid.--decorate
ist auch da drin, denn obwohl die Standardeinstellungen von Git dasselbe tun, könnte dies in verschiedenen Git-Versionen unterschiedlich oder unterschiedlich konfiguriert werden - für diese möchte ich unbedingt eine Dekoration. Letztendlich sind zusätzliche / redundante Flags hier nicht schlecht - dies geht in eine Datei; Es ist nicht etwas, das Sie die ganze Zeit tippen.lg1
&lg2
Screenshots,(origin/test_on_10.8)
die den Remote-Zweig zeigen, und imlg2
Screenshot siehe(HEAD -> master, origin/master, origin/HEAD)
sowohl lokale als auch entfernte Positionen desmaster
Zweigs undHEAD
. Dies entspricht den gängigen GUI-Tools zur Zweigvisualisierung für Git (gitk, SourceTree, TortoiseGit, Tower, Fork, GitX), allerdings mit etwas mehr Ausführlichkeit (einige GUI-Tools verwenden Farbcodierung) .Zu jedem dieser Rezepte (basierend auf Git Log oder Gitk) können Sie
--simplify-by-decoration
die uninteressanten linearen Teile des Verlaufs hinzufügen , um sie zu reduzieren . Dadurch wird viel mehr von der Topologie auf einmal sichtbar. Ich kann jetzt große Geschichten verstehen, die ohne diese Option unverständlich wären!Ich hatte das Bedürfnis, dies zu posten, weil es nicht so bekannt zu sein scheint, wie es sein sollte. Es erscheint nicht in den meisten Fragen zum Stapelüberlauf zur Visualisierung des Verlaufs, und ich musste ziemlich viel suchen, um es zu finden - selbst nachdem ich wusste, dass ich es wollte! Ich habe es endlich in diesem Debian-Fehlerbericht gefunden . Die erste Erwähnung zu Stack Overflow scheint diese Antwort von Antoine Pelisse zu sein.
quelle
--simplify-by-decoration
macht so klar, was los ist.git log --graph --all --simplify-by-decoration
funktioniert auch.--simplify-by-decoration
beim Hinzufügen von n Commits vor / nach jedem deokrierten Commit (wie-B
und-A
fürgrep
) verwenden könnten .Gitk
manchmal schmerzhaft für mich zu lesen.Motiviere mich, GitVersionTree zu schreiben .
quelle
99,999% meiner Zeit beschäftigen sich mit der Geschichte von
git lg
und die 0,001% mitgit log
.Ich möchte nur zwei Protokoll-Aliase freigeben, die nützlich sein könnten (konfigurieren aus .gitconfig):
git lg
zeigt den aktuellen Zweigverlauf an.git hist
wird die gesamte Branchengeschichte sehen.quelle
Schauen Sie sich Gitkraken an - eine plattformübergreifende Benutzeroberfläche , die die Topologie auf übersichtliche Weise anzeigt.
Hier ist ein kurzes Video-Tutorial zu einigen erweiterten Funktionen.
quelle
Ich
git log
mache gerne mit :(auch mit --all, um auch entfernte Zweige anzuzeigen)
Funktioniert mit aktuellen Git-Versionen: eingeführt seit 1.6.3 ( Do, 7. Mai 2009 )
Sie können auch die Spanne der Protokollanzeige (Anzahl der Commits) begrenzen:
(nur die letzten 5 Commits anzeigen)
Was mir an der aktuell ausgewählten Lösung nicht gefällt, ist:
Es wurden viel zu viele Informationen angezeigt (wenn ich nur eine kurze Zusammenfassung anzeigen möchte):
gitk
ist großartig, zwingt mich aber, die Shell-Sitzung für ein anderes Fenster zu verlassen, während das schnelle Anzeigen der letzten n Commits oft genug ist.quelle
Gitg ist ein großartiges Tool für Linux, ähnlich wie Gitx für OS X. Führen Sie einfach 'gitg' in der Befehlszeile irgendwo in der Baumstruktur Ihres Repositorys aus (genau wie bei gitx).
quelle
gitg --all
, wenn Sie vermeiden möchten, im Dropdown-Menü herumzuspielen.Ich fand "git-big-picture" ziemlich nützlich: https://github.com/esc/git-big-picture
Es erstellt hübsche 2D-Diagramme mit dot / graphviz anstelle der eher linearen, "eindimensionalen" Ansichten, die gitk und Freunde erstellen. Mit der Option -i werden die Verzweigungspunkte und Merge-Commits angezeigt, aber alles dazwischen wird weggelassen.
quelle
Ein schönes webbasiertes Tool ist ungit . Es läuft auf jeder Plattform, die node.js & git unterstützt. Es gibt ein Video, wie es für diejenigen funktioniert, die solche Dinge einfacher finden als lesen ...
quelle
Schauen Sie sich BranchMaster an .
Ich habe es geschrieben, um die komplexe Zweigstruktur zu visualisieren, indem ich alle Commits zwischen ihnen zu einer einzigen Zeile zusammengefasst habe. Die Zahlen geben die Anzahl der Commits an.
quelle
Niemand erwähnte
tig
? Es faltet keine Zweige wie "BranchMaster", aber ...Es ist schnell, läuft im Terminal.
Weil es so schnell ist (+ Tastatursteuerung), dass Sie eine großartige UX erhalten, ist es fast wie mein "
ls
" für Verzeichnisse, die Git-Repositorys enthalten.https://jonas.github.io/tig/
Es hat die üblichen Verknüpfungen, um
/
zu suchen, etc.(ps. es ist das Terminal im Hintergrund dieses Screenshots, es sieht heutzutage besser aus, aber mein Computer weigert sich, einen Screenshot zu machen, sorry)
(pps. Ich benutze auch Gitkraken und habe wirklich klare Visualisierungen, aber es ist viel schwerer als
tig
)quelle
Tortoise Git hat ein Tool namens "Revision Graph". Wenn Sie unter Windows arbeiten, klicken Sie einfach mit der rechten Maustaste auf Ihr Repo -> Tortoise Git -> Revisionsdiagramm.
quelle
Giggle zeichnet wirklich schöne Grafiken.
quelle
Ich benutze die folgenden Aliase.
Es enthält mehr Informationen im Farbschema als Aliase, die ich oben gesehen habe. Es scheint auch ziemlich häufig zu sein, so dass Sie möglicherweise die Möglichkeit haben, dass es in der Umgebung eines anderen vorhanden ist oder dass Sie es im Gespräch erwähnen können, ohne es erklären zu müssen.
Mit Screenshots und einer vollständigen Beschreibung hier: http://blog.kfish.org/2010/04/git-lola.html
quelle
Für Mac-Benutzer können Sie das kostenlose Open-Source-Tool GitUp ( http://gitup.co/) ausprobieren (kein Wortspiel beabsichtigt).
Mir gefällt die Art und Weise, wie die Grafiken angezeigt werden. Sie ist klarer als einige der anderen Tools, die ich gesehen habe.
Das Projekt ist hier: https://github.com/git-up/GitUp
quelle
Ich habe diesen
git log
Alias~/.gitconfig
, um den Diagrammverlauf anzuzeigen:git l
Wird mit dem Alias Folgendes angezeigt:In Git 2.12 + können Sie sogar die Linienfarben des Diagramms mithilfe der
log.graphColors
Konfigurationsoption anpassen .Das Format der Protokolle ähnelt dem Format, wobei
--oneline
der Autorenname (jeweils.mailmap
) und das relative Autorendatum hinzugefügt werden . Beachten Sie, dass die%C(auto)
Syntax, die Git anweist, die Standardfarben für Commit-Hash usw. zu verwenden, in Git> = 1.8.3 unterstützt wird .quelle
Ich habe diesen Blog-Beitrag gefunden, der einen kurzen Weg zeigt:
Normalerweise erstelle ich einen Alias für den obigen Befehl:
und einfach nur benutzen
gl
.Sie können den Alias auch zur Git-Konfiguration hinzufügen. Öffnen Sie
~/.gitconfig
den [Alias] und fügen Sie die folgende Zeile hinzu.und benutze es so:
git lg
quelle
Mein persönlicher Lieblingsalias über .gitconfig lautet:
quelle
Beachten Sie für Benutzer des VSCode-Texteditors die Git History Extension von D. Jayamanne:
quelle
Gitx ist auch ein fantastisches Visualisierungstool, wenn Sie sich unter OS X befinden.
quelle
Ein weiterer Git-Log-Befehl. Dieser mit Spalten mit fester Breite :
quelle
Auschecken
SmartGit
. Es erinnert mich sehr an die Visualisierung der TortoiseHg- Filiale und ist für den nichtkommerziellen Gebrauch kostenlos.quelle
Unter Windows gibt es ein sehr nützliches Tool, das Sie verwenden können: Git-Erweiterungen. Es ist ein GUI-Tool und macht Git-Operationen sehr einfach.
Es ist auch Open Source.
http://gitextensions.github.io
quelle
Ich habe es versucht,
--simplify-by-decoration
aber alle meine Zusammenführungen werden nicht angezeigt. Also schneide ich stattdessen nur Zeilen ohne "\" - und "/" -Symbole in den Kopfzeilen ab, während ich die Zeilen immer mit "(" behalte, um Zweige unmittelbar danach anzuzeigen. Wenn ich den Zweigverlauf anzeige, bin ich im Allgemeinen nicht an Commit-Kommentaren interessiert Ich entferne sie auch. Am Ende habe ich den folgenden Shell-Alias.quelle
können wir es komplizierter machen?
Wie wäre es mit einem einfachen Git-Protokoll --all --decorate --oneline --graph (erinnere dich an A Dog = --All --Decorate --Oneline --Graph)
quelle
Auf der offiziellen Git-Website wurden einige plattformspezifische GUI-Tools von Drittanbietern verwendet. Klicken Sie hier git GUI Tools für Linux Platform
Ich habe
gitg
undGitKraken
für Linux-Plattform verwendet. Beides ist gut, um den Commit-Baum zu verstehenquelle