lazygit
Simple terminal UI for Git commands
lazygit is an open-source terminal user interface for Git that makes staging, committing, branching, and rebasing fast and visual. It runs locally and works with any self-hosted Git remote.
Key features
- Visual staging and commits
- Interactive rebase
- Custom commands
- Fast keyboard workflow
Pros & cons
Strengths
- Fast keyboard-driven workflow
- Single lightweight binary
- Interactive rebase made easy
Trade-offs
- Terminal only
- Keybindings take learning
lazygit replaces
Last reviewed Aug 26, 2026 · 780 words
Squashing your last two messy commits into one takes exactly two keypresses in lazygit: select the top commit, press s. The same job in raw Git is an interactive rebase with an editor round-trip; in a desktop GUI it is a hunt through menus. That is the whole pitch — the Git operations you have been avoiding become single keys — delivered as one MIT-licensed Go binary that needs 64 MB of RAM and works over SSH on any server you own.
It's the odd one out in this directory, deliberately
lazygit is not a service. There is no port, no database, no docker-compose file — it runs in your terminal, on your laptop or inside an SSH session, and talks to whatever remotes your repos already have. That makes it a perfect companion to a self-hosted Gitea or Forgejo instance: the forge holds the repos, lazygit is how your hands touch them. If you are picking that forge, start with self-hosted Git forges; lazygit works identically against all of them, and against GitHub, because it only ever speaks Git.
Install is a package manager away — brew install lazygit on macOS, a package on most Linux distros, or go install github.com/jesseduffield/lazygit@latest if you have a Go toolchain. Then run lazygit inside any repository.
Ten keys cover 90% of your Git day
The learning curve is real (the catalogue lists it as a con, fairly) but shorter than it looks, because a small set of keys carries almost everything:
spacestages or unstages the selected file; press enter on a file first and the same key stages individual hunks or lines.ccommits,ppulls,Ppushes.ssquashes a commit into the one below;rrewords it;ddrops it.?opens the keybinding list for whatever panel you are in — this is the actual manual, and it is context-sensitive.
Give it three days of honest use. The payoff compounds: partial staging in particular changes how you commit, because building a clean commit from a dirty working tree stops being a git add -p chore and becomes visual.
Interactive rebase stops being a ceremony
This is the feature that justifies the 81,600 stars. Where git rebase -i drops you into a text file of pick/squash/fixup lines, lazygit shows the commit list live and lets you reorder, squash, reword, and drop with single keys, watching the result as you go. Mid-rebase conflicts appear as a normal file list you resolve and continue. The practical consequence: people who use lazygit actually clean up their branches before pushing, because the cost dropped to nearly zero. Your reviewers notice.
Two habits keep it safe. Rebase only unpushed work (the same rule as raw Git, nothing new), and remember that the reflog exists — lazygit shows it, so even a botched rebase is recoverable by checking out the pre-rebase entry.
Custom commands wire it into everything else
The config file (~/.config/lazygit/config.yml on Linux) accepts a customCommands list: your own keybinding, your own shell command, with the selected branch, commit, or file interpolated in. Mine include opening the selected branch's merge request in the browser and triggering a deploy script from a tag. This is the quiet power feature — the difference between a Git client and a cockpit for your whole flow. The same author's lazydocker applies the identical philosophy to containers, and pairing them over SSH gives a homelab a surprisingly complete text-mode control plane.
What it won't do
lazygit is terminal-only, which the catalogue rightly flags: if you want side-by-side visual diffs with syntax-aware highlighting, or you live in an IDE with deep Git integration, this is a complement rather than a replacement. It also does not manage forge-side objects — issues, pull requests, CI — beyond what custom commands can shell out to. And on a team where colleagues use GitKraken or Sourcetree, nothing breaks; it is all just Git underneath, so mixed usage costs nothing.
What I'd do
Install it today on every machine where you type git, including servers — a single static binary has no excuse not to be everywhere. Spend one session doing real work with ? open in your head, force yourself through one interactive rebase, and set up two custom commands that match your forge. After a week, keep the desktop GUI installed for big visual diffs and let lazygit take everything else. Of all the tools in this directory, it has the best ratio of adoption cost (one afternoon, 64 MB) to daily payoff I know of.
Compare lazygit
2 head-to-head comparisons.
Similar developer tools & git apps
Excalidraw
Developer Tools & GitVirtual hand-drawn style whiteboard
Replaces Miro
Hoppscotch
Developer Tools & GitOpen-source API development ecosystem
Replaces Postman, Insomnia
json-server
Developer Tools & GitFull fake REST API from a JSON file in seconds
Replaces Mockoon, Postman Mock
Strapi
Developer Tools & GitLeading open-source headless CMS
Replaces Contentful
NocoDB
Developer Tools & GitOpen-source Airtable alternative
Replaces Airtable
Penpot
Developer Tools & GitOpen-source design and prototyping platform
Replaces Figma