- Category
- Developer Tools
- Rank
- No. 56Tools index
- Pricing
- Open Source
- Type
- TOOL
- Builder
- jesseduffield
- GitHub
- 82.0k stars
- Latest release
- v0.65.0
- Date
About
Simple terminal UI for git. Stage, commit, rebase, cherry-pick, browse history fast.
What it does
Lazygit presents repository state through keyboard-driven terminal panels for files, branches, commits, reflog, stash, worktrees, remotes, and tags. It supports focused views, path-filtered history, range selection, fixup workflows, stacked branches, and configurable layouts while executing Git operations underneath.
Why it's ranked here
The case for Lazygit is strong because it handles more than routine commit creation. Reflog-based undo, fixup and autosquash support, path-aware history, range operations, repository-specific configuration, and dedicated integration testing make it a serious working interface rather than a thin command menu.
What's good
Its strongest features simplify difficult Git work without hiding the underlying model. Undo reads the reflog across sessions and can reverse eligible actions performed outside Lazygit. Fixup commits, amend commits, autosquashing, stacked-branch visualization, hunk staging, and configurable panels support disciplined history cleanup from one terminal interface.
Tradeoffs
Git 2.32.0 or newer is required. Undo only covers actions represented in the reflog, so working-tree edits, stash changes, branch creation, remote pushes, and operations within an active rebase remain outside its recovery model. Range selection also supports only some actions, and file views currently search rather than fully filter by query.
How to use it well
It suits developers who work primarily in terminals and regularly reshape local commit history. Use it for daily repository navigation, selective staging, fixup review cycles, rebases, and stacked branches. Keep command-line Git knowledge nearby for unsupported recovery cases, active-rebase repair, and operations beyond its reflog-based undo model.
Technical notes+
main.go constructs app.BuildInfo and calls app.Start, while pkg/app/entry_point.go parses CLI flags with Flaggy, merges embedded build metadata, supports repository paths, filtered history, custom configuration locations, alternate work trees and Git directories, logging, profiling, and initial panel selection. pkg/app/app.go validates Git against minGitVersionStr, initializes or opens repositories, loads recent repositories, creates command and GUI layers, and runs the interface. docs/Config.md documents layered YAML configuration, including global, parent-directory, and repository-specific settings plus JSON Schema support. Makefile exposes build, install, formatting, linting, unit-test, and integration-test targets. pkg/integration/clients/cli.go and pkg/integration/clients/injector/main.go implement named integration-test execution through an injected startup path.
Observed
- Primary language
- Go, declared by the Go module and used throughout the supplied source files.
- Interface
- Command-line application with an interactive terminal user interface.
- Git requirement
- Requires Git 2.32.0 or newer.
- Packaging and installation
- The Makefile provides Go build and install targets; the README also surfaces GitHub Releases and Homebrew.
- Platform configuration
- Documented global configuration locations cover Linux, macOS, and Windows.
- Configuration
- YAML configuration supports global, parent-directory, and repository-specific layers, with a published JSON Schema.
- Testing structure
- The Makefile defines unit and integration targets, and supplied integration client and injector source files provide a dedicated test harness.
Read from README.md, go.mod, Makefile, main.go, pkg/app/app.go, pkg/app/entry_point.go, pkg/integration/clients/cli.go, pkg/integration/clients/injector/main.go, docs/Config.md, docs/README.md, docs/Undoing.md, docs/Searching.md, docs/Range_Select.md, docs/Fixup_Commits.md, docs/Stacked_Branches.md.
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
