A terminal UI for browsing git history, with vim-style navigation.
- Commit list — scrollable log of commits showing date, author, ref decorations (branches/tags/HEAD), and subject line.
- Commit detail — full metadata and commit message, plus a highlighted, scrollable diff with a sticky header showing which file is currently in view.
- Vim-style keys throughout —
hjkl/arrows,ctrl-d/ctrl-uhalf-page paging,g/Gto jump to top/bottom. - Search —
/to search,n/Nto cycle matches (wrapping at both ends), with all matches highlighted and the current one visually distinct. In the commit list, search covers author name and the full commit message; in the commit detail view, it covers the diff content. Commits that don't match a search are dimmed in the list, so a match whose only hit is in the message body (nothing visible to highlight in the row) still stands out by contrast with the surrounding non-matches. - Handles large repositories: commits are fetched in lazily-loaded batches rather than all at once, so startup and memory use don't scale with the size of the history. Searching the list only loads as much history as a match actually requires, rather than the whole log up front.
Requires Go 1.25+ and git on your PATH.
go install github.com/maiwald/gitl@latestOr build from source:
git clone https://github.com/maiwald/gitl.git
cd gitl
go build -o gitl .Run it inside any git repository:
gitl| Key(s) | Action |
|---|---|
j/k, ↓/↑ |
Move down/up |
ctrl-d / ctrl-u |
Half-page down/up |
g / G |
Jump to top / bottom |
Enter |
Open commit detail |
[ / ] |
Jump to previous/next file's diff (detail view) |
/ |
Search (author + message, or diff content) |
n / N |
Next / previous search match (wraps) |
Esc / q |
Back (detail view) / quit (list view) |
ctrl-c |
Quit |
- Merge commits show metadata and message only; their diff isn't rendered yet (there's no single canonical diff for a merge, and picking one is deferred).
- Diff content doesn't have language-aware syntax highlighting, only add/delete/context coloring.
- In the commit list, a commit that matches search only via its full message body (not the one-line subject shown in the row) counts toward the match total but has nothing visible to highlight in that row — distinguishable from a true non-match only by not being dimmed.
- Detail-view search covers diff content only, not the commit message.
go build ./... # build everything
go vet ./... # static checks
go test ./... # run the test suite
go run . # run against the repo you're standing inSee CLAUDE.md for more on the project's structure and conventions.