Skip to content

Coming from lazygit

What transfers, what is new, and how to bring your configuration.

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.

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

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
stage --import

stage 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.

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.

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.