gitty
GitHub

Your repo, live.
Leave it open.

A fast git TUI with the GitHub Desktop experience. A commit graph, line staging, conflict resolution, fetch, push and search, written in Rust.

$brew install vedangp57/tap/gitty
Runs on macOS and Linux with git 2.30 or newer. What’s new in 0.2.0

14 ms to first frame on git/git

1.48M commits walked in a kernel clone

23 built-in themes, switched live

MIT licensed, no telemetry

Click it. It behaves like gitty.

gitty — ~/Documents/personal/gitty
history ↑1 ↓0
cf8a742 vedang · 1 hour ago
src/graph.rs
@@ -212,7 +212,8 @@ fn place_merge(
let first = lanes.claim(commit.parents[0]);
- let second = lanes.claim(commit.parents[1]);
+ // a tip merge's second parent gets a lane of its own
+ let second = lanes.open_beside(first, commit.parents[1]);
edges.push(Edge::merge(first, second));
q quitf fetchP push/ searchb compareB branches? keysmain ↑1 · 5 ms

What else it does

Stage a single line.

Status that follows the file system. Stage by file, hunk or line, discard with a copy kept in the Trash, and commit with amend and undo. It works on the real git index, so git status always agrees with what you see.

How staging works

History with a graph

Local and remote commits with refs, ahead/behind marks and a commit graph, one colour per branch. Search the whole history by text, author or path, and compare HEAD with any branch.

Resolve conflicts in place

A stopped merge, rebase, cherry-pick or revert shows in the top bar. Keep one side of each block, or both, then continue or abort with m. Nothing is staged for you.

Branches, stashes, pull requests

Switch, create, rename, delete and merge from a branch picker, stash with one key, and see the branch’s GitHub pull request in the top bar.

Fetch, pull, push

Live progress, cancel, and password prompts inside the app. A rejected push after an amend offers a force push with lease, never on main.

Your git, untouched

gitty shells out to git for everything that writes, so hooks, signing, credential helpers and your config work as they do on the command line.

Fast on real repos

14 ms to first frame and a 220×60 redraw in 0.5 ms, measured on git/git and a Linux kernel clone. CI enforces the budgets.

Give your repo somewhere to live.

One command. Your git config, hooks and credential helpers keep working as they are.

$brew install vedangp57/tap/gitty