stage follows lazygit’s keymap. Where both tools have an action, lazygit’s key wins, and stage’s older key is dropped. There are no aliases to remember.
Most of stage is therefore already in your hands.
What is the same
Section titled “What is the same”| Area | Keys |
|---|---|
| Panels | 1-5, tab, h and l, [ and ] |
| Files | space, a, d, enter, s |
| Committing | c, A, C, w |
| Commits | r, s, f, d, t, g, e, i |
| Branches | space, n, M, r, p, P, f |
| Custom patches | ctrl+p, space, enter |
| Paused operations | m |
What is new
Section titled “What is new”These have no lazygit counterpart:
| Feature | Page |
|---|---|
| Comment on lines, and send the review to an agent | Review comments |
| Go to a definition from the diff | Navigating with LSP |
| Search the repository and the whole working tree | Finding code |
| Line-level staging with a cursor and a range | Staging |
Bring your configuration
Section titled “Bring your configuration”stage --importstage reads your lazygit config.yml and writes the parts it understands into
its own configuration. Give it a path to import a different file.
Three rules govern the translation:
- Only what you changed. A lazygit configuration holds your overrides, not every setting. stage compares against lazygit’s own defaults and translates the differences. Translating the defaults too pins every stage key to lazygit’s, including the ones you never touched.
- One key changes, the row survives. A stage binding often holds several keys, and lazygit holds one key per field. stage replaces the key that field owns, and the others stay.
- Report, never guess. Anything stage cannot translate faithfully is listed for you: a setting with no counterpart, a key stage cannot spell, a collision. Nothing is approximated into your file.
Custom commands come over as they are. stage uses lazygit’s template syntax, so the command strings work without a change. Read Custom commands.
The first run offers it
Section titled “The first run offers it”If you have a lazygit configuration and no stage one, the first run asks whether to import it. It asks one time, and a refusal is remembered.
Where the two differ on purpose
Section titled “Where the two differ on purpose”Pull mode. lazygit had a git.pull.mode setting and removed it. stage
defaults to auto, which adds no flag and lets your own pull.rebase and
pull.ff decide.
Custom patches on a dirty tree. lazygit shows the options that rewrite history, and it stashes around the move-to-index command. stage hides them until the tree is clean, instead of offering a command that refuses. Read Patch building.
Finding a fixup base. lazygit falls back to your unstaged changes and offers
to stage everything. stage reads the staged change only, because F and A
both consume the index.
Worktree paths. worktreeDefaultPath has no lazygit counterpart.