- Das terminalbasierte Git-UI-Tool
lazygit kombiniert die Einfachheit der Kommandozeile mit der Intuitivität einer grafischen Oberfläche und bietet so eine schnelle und konsistente Arbeitsumgebung
- Es wurde rund um Konsistenz, Auffindbarkeit und Interaktivität entworfen, sodass selbst Einsteiger es mit grundlegenden Git-Kenntnissen sofort nutzen können
- Vim-Style-Keybindings und eine klare visuelle Struktur ermöglichen schnelle Navigation und verkürzen wiederkehrende Aufgaben
- Zeilenbasierte Patches, interaktives Rebase, Cherry-Pick usw. vereinfachen komplexe Git-Aufgaben und steigern die Produktivität
- Es basiert auf einem in Go geschriebenen Open-Source-TUI-Framework und ist damit auch ein interessantes Beispiel für die UX-Gestaltung anderer Entwickler-Tools
Der Hintergrund der Entstehung von LazyGit
- Der Autor stieß während eines Neovim-Experiments eher zufällig auf
lazygit und entdeckte dabei die Effizienz des Tools
- Danach stellte er seinen gesamten Git-Workflow auf
lazygit um
- Zuvor nutzte er eine Mischung aus
git gui, gitk und CLI, suchte wegen veralteter UI und Instabilität jedoch nach Alternativen
lazygit ist einfach, schnell und strukturell mit der CLI kompatibel, was seine Zuverlässigkeit erhöht
Die wichtigsten Merkmale von LazyGit
Konsistenz (Consistency)
- Die Oberfläche besteht aus mehreren „View-Boxen“ und behält stets dieselbe visuelle Struktur bei
- Wird die linke Box ausgewählt, ändert sich der Inhalt rechts entsprechend
- Es verwendet Git-Terminologie und -Abstraktionen unverändert, wodurch die Lernkurve abgeflacht wird
- Beispiel: Standard-Git-Konzepte wie
bisect oder hunk lassen sich ganz natürlich erlernen
- Durch Vim-Keybindings (
h/j/k/l, q, /, y, c, a, f, p, r usw.) ist eine schnelle Bedienung möglich
- Die Anzahl der Befehle bleibt begrenzt und folgt der Unix-Philosophie: „eine Sache gut machen“
Auffindbarkeit (Discoverability)
- Direkt beim Start werden sofort die benötigten Informationen angezeigt
- aktuelles Repository, Branch, Staging-Status, letzte Commits, Stashes, letzter Befehl, Shortcuts usw.
- Informationen werden ohne visuelle Überlastung präsentiert, was Kontextwechsel minimiert
- Über den Footer unten oder die Taste
? lassen sich Shortcuts sofort nachsehen
- Nutzer können ihre aktuelle Position und den Status jederzeit intuitiv erfassen
Interaktivität (Interactivity)
- Komplexe Git-Aufgaben werden über eine dialogorientierte Oberfläche geführt
- Beispiel: Beim Pushen gibt es Warnungen zu Upstream-Unterschieden, beim Rebase eine Nachfrage, ob es interaktiv sein soll
- Bei Rebase, Konfliktlösung und Branch-Wechsel werden automatisch Bestätigungen und nächste Schritte vorgeschlagen
- Statt
pick/drop/squash direkt eingeben zu müssen, lassen sich diese Aktionen per Tastenkombination ausführen
- Mit minimaler Unterbrechung steigen Vertrauen und Geschwindigkeit der Nutzer
Verbesserter Git-Workflow
lazygit führt keinen völlig neuen Workflow ein, sondern macht bestehende Git-Funktionen sicherer und schneller nutzbar
- Mit der Funktion zur Patch-Auswahl auf Zeilen- und Hunk-Ebene lässt sich Code sehr fein granular wiederherstellen
- So können nur Teile eines Commits zurückgenommen oder getrennt werden
- Beispiele für wichtige Kurz-Workflows
- Bestehenden Commit ändern und pushen:
2 space A P enter
- Neuen Commit erstellen und pushen:
2 space c <제목> P
- Branch rebasen:
3 r i ... m c
- Commit löschen:
4 d
- Commit aufteilen:
4 enter enter <c-p> n <제목> enter
- Cherry-Pick:
3 4 C 3 4 V
- Bei wiederholter Nutzung verinnerlichen sich die Shortcuts ganz natürlich, was die Arbeitsgeschwindigkeit deutlich erhöht
Lehren für die UX von Entwickler-Tools
- Die Einfachheit, Konsistenz, Auffindbarkeit, sinnvollen Standardwerte und Interaktivität von
lazygit sind hervorragende Prinzipien für das Design von Entwickler-Tools
- Tiefe Konfigurierbarkeit, Erweiterbarkeit und ein Open-Source-Ökosystem für Beiträge werden gesund aufrechterhalten
- Es basiert auf dem zu 100 % in Go geschriebenen TUI-Framework gocui, das sich auch für die Entwicklung anderer Tools nutzen lässt
- Es zeigt das Potenzial für neue CLI-/TUI-Tools, die ähnliche UX-Muster anwenden
Fazit
lazygit wird nicht nur als einfache Git-UI gesehen, sondern als Best-Practice-Beispiel für Entwicklerproduktivität und UX-Design
- Auch wenn sich KI-gestützte Funktionen weiterentwickeln, spielt es im Bereich der Versionsverwaltung, in dem Genauigkeit und Zuverlässigkeit entscheidend sind, weiterhin eine zentrale Rolle
- Das Tool entwickelt sich durch Beiträge und Zusammenarbeit der Open-Source-Community kontinuierlich weiter
- Jeder kann es nutzen und dazu beitragen und erhält dabei eine schnelle und intuitive Git-Erfahrung
1 Kommentare
Hacker-News-Kommentare
Früher mochte ich keyboard-zentrierte Git-TUIs wie magit, neogit und lazygit.
Inzwischen nutze ich statt Git aber jujutsu (jj).
Nachdem ich mich an die jj-CLI gewöhnt hatte, habe ich angefangen, jjui zu verwenden.
Ich muss häufig Commits aufteilen, und dafür ist das Plugin hunk.nvim extrem nützlich.
Und für die Auflösung von jj conflict ist jj-diffconflicts unschlagbar.
Mit jj kann ich den Commit-Graphen jetzt ganz natürlich bearbeiten, fast so, als würde ich Codezeilen verschieben.
Wenn man aus einem älteren Commit unnötige Hunks entfernt, entstehen in späteren Commits oft Kettenkonflikte. Ich frage mich, ob es ein Tool gibt, das so etwas automatisch behandelt.
Die nach Dateien getrennte Diff-Darstellung gefällt mir einfach besser, und das ist der einzige Grund.
Ich hätte allerdings gern mehr GUI-Tools speziell für jj. Wenn ich mehrere Änderungen auf einmal sehen will, nutze ich gg, aber dort fehlt ein Side-by-Side-Diff.
Nachdem ich ein Video zu GitButler gesehen habe, dachte ich, es wäre schön, wenn sich eine jj-Oberfläche ähnlich weiterentwickeln würde.
Eine GUI, in der man Änderungen per Drag-and-Drop verschieben oder interaktiv splitten/rebasen kann, wäre großartig.
Jedes Team hat seinen eigenen Git-Flow, und Entwickler verlieren sich entweder in unnötigen Mikrooptimierungen oder scheuen sich davor, es überhaupt richtig zu lernen.
Dadurch landet man am Ende in einer Struktur, in der jedes Team einen Git-Experten braucht.
Lieber hätte ich ein Tool, das einfach eine einzige Arbeitsweise erzwingt.
Das mag vielleicht komisch klingen, aber von allen Git-UIs, die ich bisher benutzt habe, war SourceTree immer noch die beste.
Für einfache Aufgaben ist es viel angenehmer als die CLI, und die Ansicht für Dateistatus und Historie ist wirklich hervorragend.
Auch Stage/Unstage auf Hunk- oder Zeilenebene geht leicht.
Schade ist nur, dass es keine Linux-Version gibt. Ich habe alle möglichen anderen Tools ausprobiert, komme am Ende aber immer wieder darauf zurück.
Kürzlich habe ich auch lazygit ausprobiert, und unter den TUIs war das ziemlich gut.
Sie aktualisiert sich nicht automatisch und gerät dadurch nicht mit der CLI in Konflikt.
Git-Extensions-Commit-Dokumentation
Ich habe mit zahllosen Bugs und merkwürdigen Problemen Zeit verschwendet. Bitte lasst SourceTree hinter euch.
Je mehr ich Git direkt benutze, desto stärker spüre ich die Irrationalität der Git-CLI-Oberfläche.
Ich verwende seit zwei Jahren jj, und ich glaube nicht, dass ich noch zur Git-CLI zurückkehren kann.
Ich habe einfach zu oft gesehen, wie Leute wegen Git verwirrt sind und Probleme verursachen, daher empfehle ich lieber, gleich etwas anderes zu benutzen.
Ich teile Änderungen gern direkt im Editor auf und committe sie dann, aber jj hat zu wenig Editor-Integration, wodurch meine Commits am Ende unordentlich werden.
Wegen des Namens wird es oft gemieden, aber GitHub Desktop ist ziemlich gut.
Es funktioniert auch mit Repos außerhalb von GitHub gut, und Commit-Änderungen sowie Cherry-Picks auf Datei- und Zeilenebene sind einfach.
Komplexere Aktionen sind jeweils erklärt, was besonders für Einsteiger hilfreich ist.
Bei Merge- oder Graph-Funktionen ist es schwächer, aber trotzdem deutlich besser als die Git-CLI, finde ich.
Wenn neue Teammitglieder dazukommen, lasse ich sie immer GH Desktop verwenden. Es führt zu weniger Fehlern und schnellerem Verständnis.
Für Menschen, die sich mit Git nicht sicher fühlen, ist es die beste Wahl.
Andererseits habe ich zu oft erlebt, wie Junior-Entwickler mit zu viel Selbstvertrauen in Git ein Repo ruiniert haben.
Deshalb empfehle ich GH Desktop meinem Team sehr nachdrücklich.
Viele Git-Nutzer kennen git-absorb nicht.
Es passt gut zu praktisch jedem Git-Flow und nimmt viel Schmerz aus dem Verteilen gestagter Änderungen auf mehrere Commits.
Die meisten TUIs haben so eine Funktion nicht.
Rust-basierte Tools mag ich nicht besonders, weil sie zu viele Abhängigkeiten mitbringen.
Dadurch habe ich das Vertrauen verloren und benutze es nicht mehr. Dass es zu magisch funktioniert, ist für mich eher ein Nachteil.
Ich bevorzuge immer noch tig.
Es hat weniger Funktionen, aber die UI ist schlicht und schnell.
Ich nutze es hauptsächlich zum inkrementellen Hinzufügen zum Index.
VS Code ist kostenlos, plattformübergreifend und wird ohnehin schon von vielen genutzt.
Die Git-GUI ist ebenfalls gut, und die üblichen Workflows lassen sich alle damit abdecken.
Normalerweise nutze ich die CLI, aber wenn ein Projekt ohnehin in VS Code geöffnet ist, ist die GUI oft schneller und intuitiver.
Die Kombination LazyVim + tmux hat meine Art, Git zu benutzen, komplett verändert.
Ich habe es so eingerichtet, dass beim Drücken von ctrl-g lazygit in einem tmux floating pane im aktuellen Verzeichnis erscheint.
So kann ich Git-Arbeit sofort erledigen, ohne erst in Neovim zu wechseln oder die UI umzuschalten.
Für einen terminal-zentrierten Workflow ist das die flexibelste und geschmeidigste Erfahrung.
Wenn man in
~/.tmux.confhinzufügt, kann man mitctrl-b ctrl-gein lazygit-Popup öffnen und es mitqwieder schließen.Ich erledige Git-Arbeit mit Sprachbefehlen + KI. Oder ich finde einfach, dass ctrl-r schon UI genug ist.
Das hat noch niemand erwähnt, aber Gitu ist ebenfalls ein ziemlich guter Client.