Git genealogy, untangled. A TUI for navigating commit graphs with color and clarity.
Git genealogy, untangled. A TUI for navigating commit graphs with color and clarity.
keifu (系譜, /keːɸɯ/) is a terminal UI tool that visualizes Git commit graphs. It shows a colored commit graph, commit details, and a summary of changed files, and lets you perform everyday Git operations: branch switching, staging, committing, and pushing — with full mouse support.
git log --graph is hard to read; keifu renders a cleaner, color-coded graphgit command in PATH (required for fetch/push)cargo install keifu
mise use -g github:trasta298/keifu@latest
brew install trasta298/tap/keifu
git clone https://github.com/trasta298/keifu && cd keifu && cargo install --path .
Run inside a Git repository:
keifu
See docs/configuration.md for configuration options.
| Key | Action |
|---|---|
j / ↓ |
Move down (scrolls the detail pane when focused) |
k / ↑ |
Move up (scrolls the detail pane when focused) |
Tab |
Switch pane focus (graph / commit detail) |
] |
Jump to next commit that has branch labels |
[ |
Jump to previous commit that has branch labels |
h / ← |
Select left branch (same commit) |
l / → |
Select right branch (same commit) |
Ctrl+d |
Page down |
Ctrl+u |
Page up |
g / Home |
Go to top |
G / End |
Go to bottom |
@ |
Jump to HEAD (current branch) |
Space |
Open file diff view |
| Key | Action |
|---|---|
Enter |
Checkout selected branch/commit |
b |
Create branch at selected commit |
d |
Delete branch (local, non-HEAD) |
f |
Fetch from origin |
c |
Commit staged changes (opens message dialog) |
p |
Push current branch to origin |
Staging keys work when the "uncommitted changes" row is selected.
| Key | Action |
|---|---|
j / k |
Select file |
Enter |
Open file diff |
s |
Stage / unstage selected file |
a |
Stage all changes |
u |
Unstage all changes |
c |
Commit staged changes |
Esc / q |
Back |
| Input | Action |
|---|---|
| Click on a commit row | Select commit (double-click opens the file list) |
| Click on a file row | Select file (double-click opens the diff) |
| Click on a pane | Focus the pane |
| Click on a status bar hint | Run that action |
| Wheel scroll | Scrolls the pane under the cursor |
Since keifu captures mouse input, use your terminal's modifier for native
text selection (usually Shift + drag; Fn + drag on iTerm2).
Note: Ghostty currently fans one wheel notch out into multiple scroll events
for mouse-mode apps (ghostty#3955),
which can scroll a few extra lines per notch. Lowering mouse-scroll-multiplier
in the Ghostty config works around it.
| Key | Action |
|---|---|
/ |
Search branches (incremental fuzzy search) |
↑ / Ctrl+k |
Select previous result |
↓ / Ctrl+j |
Select next result |
Enter |
Jump to selected branch |
Esc / Backspace on empty |
Cancel search |
| Key | Action |
|---|---|
j / k / ↑ / ↓ |
Scroll up/down |
h / l / ← / → |
Scroll left/right |
Ctrl+d / Ctrl+u |
Half-page down/up |
Ctrl+f / Ctrl+b |
Full page down/up |
g / G |
Go to top/bottom |
0 |
Scroll to line start |
] / [ |
Jump to next/previous hunk |
n / N |
Jump to next/previous file |
Esc / q |
Back to file select / close |
| Key | Action |
|---|---|
y |
Copy commit hash to clipboard (OSC 52) |
Y |
Copy branch name to clipboard (OSC 52) |
R |
Refresh repository data |
o |
Toggle remote branches |
t |
Toggle tags |
? |
Toggle help |
q / Esc |
Quit (returns focus to the graph first when the detail pane is focused) |
+N suffix (e.g., main +2). Use h/l or ←/→ to switch between them.origin/xxx creates or updates a local branch. Upstream is set only when creating a new branch. If the local branch exists but points to a different commit, it is force-updated to match the remote.o to hide them; when hidden, commits reachable only from remote branches are excluded from the graph.t to hide them.origin remote to be configured. Staging works per file (no hunk-level staging); commits include only staged changes, like plain git commit.MIT
No open issues yet, or sync has not completed.