gitui
Blazing fast Git TUI written in Rust.
Official WebsiteFeatures
Installation
brew install gituipacman -S gituicargo install gituiWhy use gitui?
gitui is a fast Git TUI client written in Rust. Similar to lazygit in feel, it provides faster startup and lower memory consumption. With keyboard-focused design, it provides an efficient Git workflow.
Blazing Speed
Startup is extremely fast with Rust. Works smoothly even with large repositories.
Low Resource
Low memory consumption, comfortable operation even on older machines and low-spec environments.
Intuitive UI
Tab-based interface for quick switching between status, log, stash, and branches.
Async Operations
Fetch and push run in background. UI is never blocked.
Interface
gitui's Status tab: File list on the left, diff on the right.
Basic Usage
Startup
# Run inside Git repository
gitui
# Specify working directory
gitui -d /path/to/repo
# Specify log level (for debugging)
gitui --logging
# Specify theme
gitui --theme darkKey Bindings
| Key | Action | Description |
|---|---|---|
Tab | Switch tabs | Switch between Status/Log/Stashing/Stashes/Branches |
1-5 | Direct tab jump | Jump directly to corresponding tab with number keys |
Enter | Staging | Stage/unstage file |
c | Commit | Open commit dialog |
C | Amend commit | Amend previous commit |
p | Push | Push to remote |
f | Fetch | Fetch from remote |
F | Pull | Pull from remote |
b | Branch operations | Open branch menu |
s | Stash | Stash changes |
D | Discard changes | Discard changes of selected file |
? | Help | Show key binding list |
q / Esc | Quit/back | Close dialog/exit gitui |
Key Features
Status Tab (Staging Operations)
Staging operations at file and hunk level are possible.
# Operations in Status tab
Enter # Stage/unstage file
a # Stage all changes
d # Show diff of selected changes
e # Open file in external editor
D # Discard changes (dangerous)
/ # Search files
# Hunk staging
Right # Focus diff view
Enter # Stage/unstage hunk
Up/Down # Move between hunksLog Tab (Commit History)
# Operations in Log tab
Enter # Show commit details
c # Tag commit
y # Copy commit ID
r # Revert
R # Rebase
s # Soft reset
h # Hard reset (dangerous)
/ # Search commitsConfiguration & Customization
Configuration File Location
# Configuration file location
# Linux/macOS: ~/.config/gitui/
# Windows: %APPDATA%/gitui/
# Configuration files
~/.config/gitui/key_bindings.ron # Key bindings
~/.config/gitui/theme.ron # ThemeCustomize Key Bindings
// ~/.config/gitui/key_bindings.ron
(
focus_right: Some(( code: Char('l'), modifiers: "")),
focus_left: Some(( code: Char('h'), modifiers: "")),
focus_above: Some(( code: Char('k'), modifiers: "")),
focus_below: Some(( code: Char('j'), modifiers: "")),
open_help: Some(( code: F(1), modifiers: "")),
move_left: Some(( code: Char('h'), modifiers: "")),
move_right: Some(( code: Char('l'), modifiers: "")),
move_up: Some(( code: Char('k'), modifiers: "")),
move_down: Some(( code: Char('j'), modifiers: "")),
page_up: Some(( code: Char('u'), modifiers: "CONTROL")),
page_down: Some(( code: Char('d'), modifiers: "CONTROL")),
home: Some(( code: Char('g'), modifiers: "")),
end: Some(( code: Char('G'), modifiers: "SHIFT")),
)Customize Theme
// ~/.config/gitui/theme.ron
(
selected_tab: Some(Reset),
command_fg: Some(White),
selection_bg: Some(Blue),
selection_fg: Some(White),
cmdbar_bg: Some(Black),
cmdbar_extra_lines_bg: Some(Black),
disabled_fg: Some(DarkGray),
diff_line_add: Some(Green),
diff_line_delete: Some(Red),
diff_file_added: Some(LightGreen),
diff_file_removed: Some(LightRed),
diff_file_moved: Some(LightMagenta),
diff_file_modified: Some(Yellow),
commit_hash: Some(Magenta),
commit_time: Some(LightCyan),
commit_author: Some(Green),
danger_fg: Some(Red),
push_gauge_bg: Some(Blue),
push_gauge_fg: Some(Reset),
tag_fg: Some(LightMagenta),
branch_fg: Some(LightYellow),
)Performance Comparison
gitui leverages Rust's characteristics for excellent startup speed and memory efficiency.
Tips
- *Press
?to show context-sensitive help - *Number keys (1-5) allow direct tab switching for quick navigation
- *Press
Enterin diff view for hunk-level staging - *Press
eto launch external editor (uses$EDITORor$GIT_EDITOR) - *Fetch and push run asynchronously, so the UI is never blocked
- *For Vim-style key bindings, customize
key_bindings.ron