Skip to content

Keybindings

Rebind any key, and the full table of what every key does.

stage follows lazygit’s keymap. Where both tools have an action, lazygit’s key wins, so most of this is already in your hands.

Every binding has an id, such as files.stage. The id is what you write in the configuration, and it is the last column of the table below.

Press ;, then 3 for the Keys section. Find the binding with /, press enter on it, press enter again, then press the key you want.

Read Settings for what stage does with a key that is already bound, and with a key it cannot spell.

The keys section maps a binding id to a key:

{
"keys": {
"files.stage": "x",
"global.quit": "<c-q>",
"files.stash": "<disabled>"
}
}

The notation is lazygit’s:

Written Means
x The letter x
X Shift and x
<c-q> Control and q
<esc>, <enter>, <tab>, <space> The named key
<disabled> Nothing. The action loses its key

stage reads the whole keys section before it draws anything, and it takes all of it or none of it.

A section with a fault opens a modal that names the entry. stage does not drop the bad line and start with the rest. A keymap that is almost what you asked for is worse than one that stops.

These are the faults it names:

  • An id that does not exist.
  • A key that another binding in the same context already uses.
  • A lazygit binding name instead of a stage id. The modal names the stage id you meant.

One id can appear in several contexts, and an override rewrites all of them together.

stage also drops the written hint for that binding. A binding that shows j/k by default shows only your key afterwards, so the footer keeps telling the truth about the keys you have.

Which table applies depends on where you are. Read Panels, modes and contexts.

Press ? in the app for the same information as the table below, narrowed to where you are standing.

Generated from the app’s own keymap table — the same one that drives dispatch, the footer and the ? modal. Section titles are the app’s too.

Key Action Binding id
c commit global.commit
A amend global.amend
1-5 jump to panel global.jump
E explorer global.explorer
tab next panel global.nextPanel
shift+tab prev panel global.prevPanel
R refresh global.refresh
@ command log global.commandLog
ctrl+g grep global.grep
# review comments global.review
ctrl+p patch options global.patchOptions
: shell command global.shellCommand
m merge/rebase options op.menu
z undo global.undo
Z redo global.redo
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
ctrl+z suspend global.suspend
ctrl+w toggle whitespace global.whitespace
} more diff context global.moreContext
{ less diff context global.lessContext
) rename similarity global.moreRenames
( rename similarity down global.lessRenames
ctrl+r recent repos global.recentRepos
; settings global.settings
? help global.help
q quit global.quit
Key Action Binding id
shift+↓/↑ extend selection list.rangeDown
shift+↑ extend up list.rangeUp
j/k navigate list.down
k up list.up
,/. page list.pageUp
. page down list.pageDown
</> first/last list.first
> last list.last
enter focus diff list.open
h prev panel list.prevPanel
l next panel list.nextPanel
v select list.rangeToggle
J/K scroll diff list.scrollMainDown
K scroll diff up list.scrollMainUp
ctrl+o yank list.yank
/ filter list.filter
esc clear filter list.clearFilter
Key Action Binding id
enter apply filter.apply
esc clear filter.clear
bksp close filter.dismiss
ctrl+c quit global.quit

Status panel (its enter replaces focus diff)

Section titled “Status panel (its enter replaces focus diff)”
Key Action Binding id
enter recent repos status.recentRepos
Key Action Binding id
space stage/unstage files.stage
a toggle all files.stageAll
d discard files.discard
s stash files.stash
enter edit hunks files.editHunks
ctrl+v cycle file view files.viewFile
` tree view files.toggleTree
- collapse all list.collapseAll
= expand all list.expandAll
o open files.open
e edit files.edit
i ignore files.ignore
w commit w/o hooks files.commitNoHooks
f fetch files.fetch
r refresh files.refresh
ctrl+f find fixup base commits.findFixupBase
S stash options files.stashMenu
D discard options files.discardMenu
ctrl+s filter log by file files.filterPath
ctrl+b filter by status files.statusFilter
ctrl+t difftool diff.tool
C commit w/ editor files.commitEditor
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space switch worktrees.switch
n new worktrees.new
d remove worktrees.delete
o open in editor worktrees.open
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space enter submodules.enter
u update submodules.update
i init submodules.init
d remove submodules.remove
n add submodules.add
e edit url submodules.editUrl
b bulk actions submodules.bulk
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
enter open explorer.open
h/l fold explorer.collapse
l expand explorer.expand
e edit explorer.edit
]/[ tab branches.nextTab
[ prev tab branches.prevTab
ctrl+v cycle view explorer.viewFile
- collapse all list.collapseAll
= expand all list.expandAll
1-5 git panels explorer.jumpBack
Key Action Binding id
]/[ tab branches.nextTab
[ prev tab branches.prevTab
1-5 git panels search.jumpBack
Key Action Binding id
esc back staging.back
space stage/unstage staging.apply
d discard staging.discard
tab other side staging.side
v select staging.select
a select hunk staging.selectHunk
]/[ hunk staging.nextHunk
[ prev hunk staging.prevHunk
j/k move staging.down
k up staging.up
ctrl+d/u half page staging.halfDown
ctrl+u half up staging.halfUp
f/b page staging.pageDown
pgup page up staging.pageUp
</> first/last staging.first
> last staging.last
ctrl+o yank selection staging.yank
e edit at line staging.edit
c commit staging.commit
C commit w/ editor files.commitEditor
w code nav (read view only) staging.codeNavUnavailable
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
q quit global.quit

Resolve conflicts (enter on a conflicted file)

Section titled “Resolve conflicts (enter on a conflicted file)”
Key Action Binding id
esc back resolve.back
space take side resolve.pick
b take both resolve.both
j/k switch side resolve.side
h/l conflict resolve.next
h prev conflict resolve.prev
z undo pick resolve.undo
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
q quit global.quit
Key Action Binding id
enter execute plan.execute
esc cancel plan.cancel
p pick plan.pick
r reword plan.reword
e edit plan.edit
s squash plan.squash
f fixup plan.fixup
d drop plan.drop
J/K move plan.moveDown
K move up plan.moveUp
j/k nav plan.down
k up plan.up
</> first/last plan.first
> last plan.last
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
q quit global.quit
Key Action Binding id
space checkout branches.checkout
c checkout by name branches.checkoutByName
F force checkout branches.forceCheckout
U browse tree branches.tree
n new branches.new
d delete branches.delete
R rename branches.rename
M merge branches.merge
r rebase branches.rebase
p/P pull/push branches.pull
P push branches.push
u upstream branches.setUpstream
N move to new branch branches.moveToNewBranch
f fast-forward branches.fastForward
s sort order branches.sortOrder
- prev branch branches.previous
o create PR branches.openPr
O PR options branches.prOptions
ctrl+y copy PR url branches.copyPrUrl
G open PR branches.openPrInBrowser
W diff against diff.menu
ctrl+t difftool diff.tool
w new worktree worktrees.newFromRef
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space checkout remotes.checkout
enter expand/open remotes.open
n new remotes.new
d delete remotes.delete
e edit remote remotes.edit
f fetch remotes.fetch
s sort order remotes.sortOrder
W diff against diff.menu
ctrl+t difftool diff.tool
w new worktree worktrees.newFromRef
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space checkout tags.checkout
n new tags.new
d delete tags.delete
P push tags.push
g reset to tags.reset
W diff against diff.menu
ctrl+t difftool diff.tool
w new worktree worktrees.newFromRef
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space checkout commits.checkout
C copy pick commits.copyPick
V paste picks commits.pastePick
B mark rebase base commits.markBase
* select branch commits commits.selectBranch
A amend into commits.amendInto
a author commits.amendAttribute
r reword commits.reword
T tag commit commits.tag
i rebase plan commits.rebasePlan
n new branch commits.newBranch
e edit (stop here) commits.editCommit
ctrl+k / alt+↑ move commit up commits.moveUp
ctrl+j / alt+↓ move commit down commits.moveDown
ctrl+s filter by path commits.filterPath
s squash commits.squash
f fixup commits.fixup
F create fixup commits.createFixup
S squash fixups commits.squashFixups
d drop commits.drop
t revert commits.revert
g reset commits.reset
y yank commits.yank
o open in browser commits.openInBrowser
U browse tree commits.tree
enter view files commits.viewFiles
ctrl+f find fixup base commits.findFixupBase
ctrl+r reset picks commits.resetPick
W diff against diff.menu
ctrl+t difftool diff.tool
w new worktree worktrees.newFromRef
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space checkout reflog.checkout
g reset reflog.reset
c cherry-pick reflog.cherryPick
C copy pick reflog.copyPick
ctrl+r reset picks commits.resetPick
n new branch reflog.newBranch
U browse tree reflog.tree
W diff against diff.menu
ctrl+t difftool diff.tool
w new worktree worktrees.newFromRef
]/[ tab branches.nextTab
[ prev tab branches.prevTab
Key Action Binding id
space cherry-pick log.pick
C copy pick log.copyPick
ctrl+r reset picks commits.resetPick
U browse tree log.tree
j/k move log.down
k up log.up
</> first/last log.first
> last log.last
esc back log.back
Key Action Binding id
enter go to reference references.pick
j/k move references.down
k up references.up
</> first/last references.first
> last references.last
esc back references.back
Key Action Binding id
enter go to line review.pick
y copy review review.copy
s send to agent review.send
e edit review.edit
d delete review.delete
j/k move review.down
k up review.up
</> first/last review.first
> last review.last
esc back review.back
Key Action Binding id
ctrl+s save comment noteEdit.save
esc cancel noteEdit.cancel
ctrl+c quit global.quit
Key Action Binding id
space apply stash.apply
g pop stash.pop
d drop stash.drop
r rename stash.rename
W diff against diff.menu
w new worktree worktrees.newFromRef
Key Action Binding id
m merge/rebase options op.menu
Key Action Binding id
esc back main.back
j/k scroll main.down
k up main.up
d/u half page main.halfDown
u half up main.halfUp
space/b page main.pageDown
pgup page up main.pageUp
</> top/bottom main.first
> bottom main.last
M full diff main.fullDiff
v select lines main.select
/ search in view main.search
n/N next/prev match main.nextMatch
N prev match main.prevMatch
w/W next identifier main.identNext
W prev identifier main.identPrev
g go to definition main.gotoDef
s jump to symbol main.symbols
r references main.references
K hover main.hover
shift+tab jump back main.jumpBack
tab jump forward main.jumpForward
Key Action Binding id
enter jump mainSearch.apply
esc cancel mainSearch.clear
bksp close mainSearch.dismiss
ctrl+c quit global.quit
Key Action Binding id
esc back mainSelect.back
v anchor mainSelect.select
ctrl+o yank mainSelect.yank
c comment mainSelect.comment
# review comments global.review
j/k move mainSelect.down
k up mainSelect.up
tab other side mainSelect.otherSide
ctrl+d/u half page mainSelect.halfDown
ctrl+u half up mainSelect.halfUp
f/b page mainSelect.pageDown
pgup page up mainSelect.pageUp
</> first/last mainSelect.first
> last mainSelect.last
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
ctrl+c quit global.quit
Key Action Binding id
esc back cmdlog.back
j/k scroll cmdlog.down
k up cmdlog.up
d/u half page cmdlog.halfDown
u half up cmdlog.halfUp
</> top/bottom cmdlog.first
> bottom cmdlog.last
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
q quit global.quit
Key Action Binding id
esc back (patch kept) pbfiles.back
space toggle file pbfiles.toggle
enter select lines pbfiles.open
ctrl+p patch options pbfiles.options
j/k navigate pbfiles.down
k up pbfiles.up
</> first/last pbfiles.first
> last pbfiles.last
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
q quit global.quit
Key Action Binding id
esc back to files pbedit.back
space toggle lines pbedit.toggle
v select pbedit.select
ctrl+p patch options pbedit.options
]/[ hunk pbedit.nextHunk
[ prev hunk pbedit.prevHunk
j/k move pbedit.down
k up pbedit.up
</> first/last pbedit.first
> last pbedit.last
+/_ screen mode global.nextScreenMode
_ prev screen mode global.prevScreenMode
? help global.help
q quit global.quit

363 bindings across 29 contexts.