日本語版はこちら
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 basic branch operations.

- Readable commit graph —
git log --graphis hard to read; keifu renders a cleaner, color-coded graph - Fast branch switching — With AI-assisted coding, working on multiple branches in parallel has become common. keifu makes branch switching quick and visual
- Keep it simple — Only basic Git operations are supported; this is not a full-featured Git client
- Narrow terminal friendly — Works well in split panes and small windows
- No image protocol required — Works on any terminal with Unicode support
- Unicode commit graph with per-branch colors
- Commit list with branch labels, date, author, short hash, and message (some fields may be hidden on narrow terminals)
- Commit detail panel with full message and changed file stats (+/-)
- Git operations: checkout, create/delete branch, fetch
- Branch search with dropdown UI
- Run inside a Git repository (auto-discovery from current directory)
- A terminal with Unicode line drawing support and color
gitcommand in PATH (required for fetch)- Rust toolchain (for building from source)
mise use -g github:trasta298/keifu@latest
git clone https://github.com/trasta298/keifu && cd keifu && cargo install --path .
Run inside a Git repository:
See docs/configuration.md for configuration options.
| Key | Action |
|---|---|
j / ↓ |
Move down |
k / ↑ |
Move up |
] / Tab |
Jump to next commit that has branch labels |
[ / Shift+Tab |
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) |
| Key | Action |
|---|---|
Enter |
Checkout selected branch/commit |
b |
Create branch at selected commit |
d |
Delete branch (local, non-HEAD) |
f |
Fetch from origin |
| 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 |
|---|---|
R |
Refresh repository data |
? |
Toggle help |
q / Esc |
Quit |
- The TUI loads up to 500 commits across all branches.
- Merge commits are diffed against the first parent; the initial commit is diffed against an empty tree.
- Changed files are capped at 50 and binary files are skipped.
- If there are staged or unstaged changes (excluding untracked files), an “uncommitted changes” row appears at the top.
- When multiple branches point to the same commit, the label is collapsed to a single name with a
+Nsuffix (e.g.,main +2). Useh/lor←/→to switch between them. - Checking out
origin/xxxcreates 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. - Remote branches are displayed, but delete operations only work with local branches.
- Fetch requires the
originremote to be configured.
MIT