# gitstack
[](https://crates.io/crates/gitstack)
[](LICENSE)
> **Git history viewer focused on analysis and insights**
## Why gitstack?
| 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
```bash
cargo install gitstack
```
Or build from source:
```bash
git clone https://github.com/Hiro-Chiba/gitstack
cd gitstack
cargo install --path .
```
## Features
### Analysis Suite
Press a single key to get instant insights:
| `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
| 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
| `j` / `↓` | Move down |
| `k` / `↑` | Move up |
| `g` | Go to top |
| `G` | Go to bottom |
| `Ctrl+d` | Page down |
| `Ctrl+u` | Page up |
### Views
| `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
| `/` | 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`
```toml
[display]
date_format = "relative" # or "absolute"
show_stats = true
[keybindings]
quit = "q"
help = "?"
```
## License
MIT
---
[日本語版](README.ja.md) · [Design Doc](docs/DESIGN.md)