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.