LA

lazygit

Simple terminal UI for Git commands

Developer Tools & Git ★ 82.6k stars Easy setup MIT

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:

  • space stages or unstages the selected file; press enter on a file first and the same key stages individual hunks or lines.
  • c commits, p pulls, P pushes.
  • s squashes a commit into the one below; r rewords it; d drops 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