The lazy Git UI you didn't know you need

Lazygit: main use cases and strengths

  • Frequently praised for:
    • Fast hunk/line staging and patching, including amending arbitrary commits and moving lines between commits.
    • Clean keyboard-driven workflow (Vim-like navigation) and good default diff view.
    • Being easy to drop into existing Git habits: “use git for the weird stuff, lazygit for the everyday stuff”.
  • Common pattern: people still use Git CLI for fundamentals, but lazygit for:
    • Reviewing PRs commit-by-commit.
    • Interactive staging, undoing, and crafting clean histories.

Integrations and workflows

  • Popular in terminal-centric setups with tmux, Neovim, WezTerm, etc.:
    • tmux popups bound to a key (e.g. Ctrl‑g) to overlay lazygit in the current directory.
    • Neovim integration via plugins (e.g. snacks.nvim, LazyVim bundles).
  • Some rely on external diff tools (difftastic, custom diff.external) with lazygit as the driver.

Critiques and limitations

  • Complaints include:
    • Steep keyboard-learning curve; strong dislike from some who expect mouse-first, discoverable UIs.
    • Slowness when patching large files.
    • Awkwardness with mouse text selection/copying in TUI environments.
  • Several users disable or guard force-push in lazygit to avoid accidental history rewrites.

Other TUIs/GUIs compared

  • TUIs: tig, gitui, jjui, lazyjj, fugitive, magit, gitu, gitin, gitk, git gui. Each has its niche (e.g. tig for simple hunk staging, magit for comprehensive workflows).
  • GUIs: SourceTree, Fork, Tower, Sublime Merge, SmartGit, TortoiseGit, Git Extensions, SourceGit, GitKraken, GitHub Desktop, GitX.
    • Strong disagreements: some consider SourceTree or Fork “best in class”; others find them slow, buggy, or confusing.
    • IDE UIs (JetBrains, VS Code, Visual Studio) are widely used for diffs, conflict resolution, graphs, and partial staging.

Jujutsu (jj) and rethinking Git

  • Many comments pivot to jj as a “better Git”:
    • Emphasis on editable commit graphs, powerful rebases, first-class conflicts, and easier mental model.
    • jj tools: jjui, VisualJJ, jj-dedicated Neovim plugins, lazyjj; jj split, jj commit -i, jj absorb, jj-spr.
    • Seen as easier for juniors than Git (no explicit staging step by default).
  • Discussion about Git’s UX:
    • Some argue Git is an over-flexible toolbox that encourages bespoke flows and mistakes.
    • Others value Git CLI + aliases and distrust extra layers that hide or constrain behavior.

Commit hygiene and helper tools

  • Strong interest in tools for:
    • Splitting/regrouping hunks across commit series and avoiding repeated conflict resolution.
    • git-absorb (and now jj absorb) to auto-create fixup commits.
    • Git rerere to auto-apply previously learned conflict resolutions.
  • Some prioritize pristine, story-like histories; others prioritize immutable timelines and warn against heavy history rewriting.