316 lines
8.1 KiB
Markdown
316 lines
8.1 KiB
Markdown
---
|
||
title: "Lazygit – Der Terminal-Git-Client"
|
||
date: "2026-09-08"
|
||
---
|
||
|
||
# Lazygit – Der Terminal-Git-Client
|
||
|
||
Lazygit ist ein schneller, terminalbasierter Git-Client mit TUI (Terminal User
|
||
Interface). Du steuerst alles per Tastatur und behältst dein ganzes Repository
|
||
auf einen Blick – kein Merken von kryptischen `git`-Befehlen mehr.
|
||
|
||
## Installation
|
||
|
||
```bash
|
||
# Arch / Manjaro
|
||
sudo pacman -S lazygit
|
||
|
||
# Ubuntu / Debian
|
||
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
|
||
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
|
||
tar xf lazygit.tar.gz lazygit
|
||
sudo install lazygit /usr/local/bin
|
||
|
||
# macOS
|
||
brew install lazygit
|
||
|
||
# Windows (mit Winget)
|
||
winget install JesseDuffield.lazygit
|
||
```
|
||
|
||
Start: Einfach `lazygit` im Repository-Verzeichnis ausführen.
|
||
|
||
---
|
||
|
||
## Navigation (global)
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `h` / `l` | Zwischen Panels wechseln (links/rechts) |
|
||
| `j` / `k` | In Liste nach unten/oben |
|
||
| `↑` / `↓` | Dasselbe wie j/k |
|
||
| `g` | Zum Anfang der Liste |
|
||
| `shift+G` | Zum Ende der Liste |
|
||
| `/` | Suchen (im aktuellen Panel) |
|
||
| `q` | Lazygit beenden |
|
||
| `esc` | Zurück / Aktion abbrechen |
|
||
| `?` | Hilfe anzeigen (alle Tasten) |
|
||
| `tab` | In neuem Panel: zwischen Bereichen springen |
|
||
|
||
---
|
||
|
||
## Panel 1: Status (ganz links)
|
||
|
||
Zeigt, ob du im normalen Modus, im Rebase, Merge-Konflikt etc. bist.
|
||
Normalerweise springst du mit `1`-`5` direkt in die anderen Panels.
|
||
|
||
---
|
||
|
||
## Panel 2: Dateien / Working Tree
|
||
|
||
Hier siehst du alle geänderten, neuen und gelöschten Dateien.
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `Leertaste` | Datei stagen/unstagen (markiert) |
|
||
| `a` | Alle Dateien stagen/unstagen |
|
||
| `c` | Commit erstellen (öffnet Editor für Commit-Message) |
|
||
| `shift+C` | Commit mit Editor (git commit) |
|
||
| `enter` | Diff der ausgewählten Datei anzeigen |
|
||
| `d` | Änderungen der Datei verwerfen (Achtung, unwiderruflich!) |
|
||
| `shift+D` | Datei aus Working Tree löschen |
|
||
| `e` | Datei im Editor öffnen |
|
||
| `o` | Datei mit Standardprogramm öffnen |
|
||
| `i` | Datei zu .gitignore hinzufügen / Eintrag entfernen |
|
||
| `p` | Patch – interaktiv nur Teile einer Datei stagen |
|
||
|
||
### Patch-Modus (`p`)
|
||
|
||
Nach Drücken von `p` auf einer Datei:
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `Leertaste` | Aktuellen Hunks stagen/unstagen |
|
||
| `j` / `k` | Zwischen Hunks navigieren |
|
||
| `v` | Selektionsmodus (visuell) – dann Leertaste für Auswahl |
|
||
| `tab` | In Diff-Fenster springen |
|
||
|
||
---
|
||
|
||
## Panel 3: Branches
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `Leertaste` | Branch auschecken |
|
||
| `n` | Neuen Branch erstellen |
|
||
| `c` | Branch mit Namen umbenennen (checkout) |
|
||
| `shift+C` | Branch umbenennen (ohne checkout) |
|
||
| `d` | Branch löschen |
|
||
| `shift+D` | Branch force-löschen (auch wenn nicht gemerged) |
|
||
| `m` | Aktuellen Branch in ausgewählten Branch mergen |
|
||
| `M` | Merge ohne Fast-Forward |
|
||
| `enter` | Commits des Branches anzeigen |
|
||
| `r` | Branch rebasen auf ausgewählten Branch |
|
||
| `f` | Fast-Forward des ausgewählten Branches |
|
||
| `T` | Tag erstellen |
|
||
| `g` | Branch zurücksetzen (reset) auf ausgewählten |
|
||
|
||
---
|
||
|
||
## Panel 4: Commits (im Branch-Panel mit Enter)
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `s` | Squash down – Commit in den darunterliegenden squashen |
|
||
| `shift+S` | Fixup – Commit in darunterliegenden squashen, Message verwerfen |
|
||
| `r` | Rebase auf diesen Commit starten / Rebase fortsetzen |
|
||
| `R` | Commit-Message mit `git commit --amend` bearbeiten |
|
||
| `A` | Commit mit Staged-Änderungen amendend (git commit --amend) |
|
||
| `t` | Commit rückgängig machen (revert) |
|
||
| `shift+T` | Revert erstellen, ohne zu commiten |
|
||
| `ctrl+j` / `ctrl+k` | Commit in der Liste nach unten/oben verschieben (interaktiv) |
|
||
| `g` | Reset auf diesen Commit – Optionen: |
|
||
| | `soft` – HEAD verschieben, Index bleibt |
|
||
| | `mixed` (default) – HEAD + Index verschieben |
|
||
| | `hard` – HEAD + Index + Working Tree (Achtung, verwirft!) |
|
||
| `d` | Commit löschen (während Rebase) |
|
||
| `shift+D` | Commits ab hier löschen (während Rebase) |
|
||
| `f` | Fixup-Commit erstellen |
|
||
| `shift+F` | Fixup-Commit für einen bestimmten Commit |
|
||
| `enter` | Dateien des Commits anzeigen |
|
||
| `ctrl+l` | Commit-Log anzeigen |
|
||
| `shift+C` | Commit kopieren (cherry-pick) |
|
||
| `v` | Commits in die Zwischenablage kopieren |
|
||
|
||
---
|
||
|
||
## Panel 5: Stash
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `Leertaste` | Stash anwenden |
|
||
| `g` | Stash anwenden und danach löschen (pop) |
|
||
| `d` | Stash löschen |
|
||
| `enter` | Dateien des Stashs anzeigen |
|
||
| `n` | Neuen Stash mit Nachricht erstellen |
|
||
| `s` | Schnell-Stash (ohne Nachricht) |
|
||
|
||
---
|
||
|
||
## Reflog
|
||
|
||
Mit `ctrl+o` (oder im Commits-Panel) öffnest du das Reflog – alle HEAD-Bewegungen.
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `enter` | Reflog-Eintrag anzeigen |
|
||
| `g` | Auf diesen Eintrag zurücksetzen (soft/mixed/hard) |
|
||
| `ctrl+o` | Reflog schließen |
|
||
|
||
---
|
||
|
||
## Remote / Push & Pull
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `p` | Push (im Branch- oder Commits-Panel) |
|
||
| `shift+P` | Force-Push (`--force-with-lease`) |
|
||
| `shift+F` | Fetch (alle Remotes) |
|
||
| `ctrl+p` | Pull (fetch + merge) |
|
||
| `shift+ctrl+P` | Pull mit Rebase |
|
||
|
||
---
|
||
|
||
## Undo / Redo
|
||
|
||
Lazygit hat eine eingebaute Undo-Funktion – ein Lebensretter!
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `z` | Letzte Git-Aktion rückgängig machen (undo) |
|
||
| `shift+Z` | Rückgängig gemachte Aktion wiederholen (redo) |
|
||
|
||
Funktioniert für: Commit, Stash, Branch-Reset, Checkout, Cherry-Pick, Revert,
|
||
Merge ...
|
||
|
||
---
|
||
|
||
## Konflikte lösen
|
||
|
||
Im Merge-Konflikt-Fall zeigt Lazygit die betroffenen Dateien.
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `Leertaste` | Datei als "ours" markieren (eigene Version) |
|
||
| `b` | Datei als "theirs" markieren (fremde Version) |
|
||
| `↑` / `↓` | Hunk auswählen |
|
||
| `Leertaste` | Hunk auswählen (ours/theirs oder beide) |
|
||
| `a` | Alle Hunks auf einmal akzeptieren |
|
||
| `shift+M` | Merge-Tool für diese Datei öffnen |
|
||
|
||
---
|
||
|
||
## Submodule
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `enter` | In Submodule wechseln (öffnet neue Lazygit-Instanz) |
|
||
| `i` | Submodule init |
|
||
| `u` | Submodule updaten |
|
||
| `n` | Submodule hinzufügen |
|
||
|
||
---
|
||
|
||
## Worktrees
|
||
|
||
| Taste | Aktion |
|
||
|-------|--------|
|
||
| `n` | Neues Worktree erstellen |
|
||
| `enter` | In Worktree wechseln |
|
||
| `d` | Worktree löschen |
|
||
|
||
---
|
||
|
||
## Tipps & häufige Workflows
|
||
|
||
### Änderungen committen
|
||
|
||
```
|
||
1. j/k → Datei auswählen
|
||
2. Leertaste → Stagen
|
||
3. c → Commit-Message schreiben, Enter
|
||
4. p → Pushen
|
||
```
|
||
|
||
### Letzten Commit ändern (amend)
|
||
|
||
```
|
||
1. a → Alle Dateien stagen
|
||
2. shift+A → Amend (fügt Staged-Änderungen zum letzten Commit hinzu)
|
||
```
|
||
|
||
### Branch erstellen und wechseln
|
||
|
||
```
|
||
1. 3 → Branch-Panel
|
||
2. n → Neuen Branch, Namen eingeben, Enter
|
||
```
|
||
|
||
### Commits zusammenfassen (squash)
|
||
|
||
```
|
||
1. 4 → Commits-Panel
|
||
2. j/k → Commit auswählen (der, der in den darunterliegenden gesquasht werden soll)
|
||
3. s → Squash
|
||
```
|
||
|
||
### Commit rückgängig machen
|
||
|
||
```
|
||
1. 4 → Commits-Panel
|
||
2. g → "reset"
|
||
3. soft → HEAD verschieben, Änderungen bleiben im Index
|
||
```
|
||
|
||
Falls du es dir anders überlegst: `z` (undo).
|
||
|
||
### Interaktives Rebase
|
||
|
||
```
|
||
1. 4 → Commits-Panel
|
||
2. r auf einem älteren Commit → Rebase starten
|
||
3. j/k → Commits auswählen, dann s/f/d zum Squashen/Fixen/Löschen
|
||
4. r → Rebase fortsetzen
|
||
```
|
||
|
||
---
|
||
|
||
## Konfiguration
|
||
|
||
Die Konfigurationsdatei liegt unter:
|
||
- Linux/macOS: `~/.config/lazygit/config.yml`
|
||
- Windows: `%APPDATA%/lazygit/config.yml`
|
||
|
||
Beispiel für ein nützliches Config-Snippet:
|
||
|
||
```yaml
|
||
gui:
|
||
theme:
|
||
activeBorderColor:
|
||
- '#89b4fa'
|
||
- bold
|
||
inactiveBorderColor:
|
||
- '#a6adc8'
|
||
nerdFontsVersion: "3"
|
||
|
||
git:
|
||
paging:
|
||
colorArg: always
|
||
pager: delta --dark --paging=never
|
||
|
||
# Commit-Konvention für Merge-Commits
|
||
commitPrefixes:
|
||
my_project:
|
||
pattern: "^(\\w+\\/\\w+-\\d+)"
|
||
replace: "[$1] "
|
||
```
|
||
|
||
---
|
||
|
||
## Fazit
|
||
|
||
Lazygit macht Git massiv schneller: Du siehst Diff, Branches, Commits und
|
||
Stashes gleichzeitig, stagen mit Leertaste, commiten mit `c`, pushen mit `p`.
|
||
Kein `git status`-Tippen mehr, kein `git log --oneline`-Starren.
|
||
|
||
Die beiden wichtigsten Tasten: `z` für Undo und `?` für Hilfe. |