gitstack
Git history viewer focused on analysis and insights
Why gitstack?
| Tool | Focus | Best For |
|---|---|---|
| lazygit | Git operations | Staging, rebasing, cherry-picking |
| tig | Log browsing | Quick commit viewing |
| keifu | Graph visualization | Beautiful branch display |
| gitstack | Analysis & Insights | Understanding your codebase |
gitstack answers questions like:
- "Who has been working on this module?"
- "Which files are changed most frequently?"
- "Are there any stale branches that should be cleaned up?"
Install
Or build from source:
Features
Analysis Suite
Press a single key to get instant insights:
| Key | View | What it shows |
|---|---|---|
A |
Author Stats | Commits, lines added/deleted per author |
H |
Heatmap | Most frequently changed files |
T |
Timeline | Commit activity by hour/day |
O |
Ownership | Code ownership by file/directory |
t |
Topology | Branch health and stale branch detection |
Smart Filter
Powerful filtering with intuitive syntax:
/author:john # Filter by author
/since:7days # Recent commits
/until:2024-01-01 # Before date
/message:fix # Search commit messages
/file:src/main.rs # Commits touching specific file
/hash:abc123..def456 # Commit range
Combine filters: /author:john since:1week file:*.rs
2-Pane Layout
Toggle with v to see commit details alongside the graph:
┌─ Graph ─────────────────┬─ Details ────────────────────┐
│ ● abc123 feat: auth │ Author: John Doe │
│ │ │ Date: 2024-01-15 10:30 │
│ ○ def456 fix: bug │ │
│ │ │ feat: add authentication │
│ ◆ ghi789 Merge │ │
│ │ │ - Add login endpoint │
│ ○ jkl012 init │ - Add JWT validation │
└─────────────────────────┴──────────────────────────────┘
Branch Graph
Color-coded branch visualization with smart color assignment:
- Adjacent lanes never share the same color
- Branches from the same fork point get distinct colors
- Clear merge visualization with proper line connections
Comparison
| Feature | gitstack | keifu | lazygit | tig |
|---|---|---|---|---|
| Author statistics | ✅ | ❌ | ❌ | ❌ |
| File heatmap | ✅ | ❌ | ❌ | ❌ |
| Code ownership | ✅ | ❌ | ❌ | ❌ |
| Branch health / topology | ✅ | ❌ | ❌ | ❌ |
| Smart filter syntax | ✅ | ❌ | ❌ | ❌ |
| 2-pane layout | ✅ | ❌ | ✅ | ❌ |
| Commit range filter | ✅ | ❌ | ❌ | ❌ |
| Branch graph | ✅ | ✅ | ✅ | ✅ |
| Staging/commit | ✅ | ❌ | ✅ | ✅ |
| Interactive rebase | ❌ | ❌ | ✅ | ❌ |
Keybindings
Navigation
| Key | Action |
|---|---|
j / ↓ |
Move down |
k / ↑ |
Move up |
g |
Go to top |
G |
Go to bottom |
Ctrl+d |
Page down |
Ctrl+u |
Page up |
Views
| Key | Action |
|---|---|
Enter |
Show commit details / diff |
P |
Show file patch (in detail view) |
v |
Toggle 2-pane layout |
A |
Author statistics |
H |
File heatmap |
T |
Commit timeline |
O |
Code ownership |
t |
Branch topology |
Actions
| Key | Action |
|---|---|
/ |
Open filter |
Esc |
Clear filter / close view |
y |
Copy commit hash |
b |
Show blame view |
s |
Open status view |
F |
Fetch from remote |
? |
Show help |
q |
Quit |
Configuration
Config file: ~/.config/gitstack/config.toml
[]
= "relative" # or "absolute"
= true
[]
= "q"
= "?"
License
MIT