gitwig

⌨️ Keybindings

Key Mode Action
↑ / k Normal Move selection up
↓ / j Normal Move selection down
a Normal Add a new repository (via directory scanner)
A Normal Bulk add folders in a directory
i Normal Import remote repository
e Normal Edit the selected repository’s path. Its labels, star, pin, per-repository settings, last visit and commit-message history move to the new path; a path another entry already tracks (as written, via ~, or through a symlink) is refused with “Repository already added”
D Normal Delete the selected item (asks)
l Normal Edit labels of the selected item
R Normal Refresh status of selected item
F Normal Bulk fetch all tracked repositories concurrently
E Normal Show why the selected repository’s last fetch failed
f Normal Enter repository search mode
Tab / Shift+Tab Normal Cycle summary-bar filter (repos → dirty → ahead → stale) forward / backward
L Normal Open label picker: filter the list to one label (sticky until deselected; persists across restarts)
1 … 9 Normal Quick label: apply the label in slot N as the sticky filter, matching the numbered chips under the summary bar. Slots are assigned in the order labels are first viewed (FIFO) and never reorder; press the active slot again to clear it
Esc LabelPicker Close label picker without changing the filter
↑ / ↓ LabelPicker Navigate label list
Enter LabelPicker Apply selected label (re-selecting the active label, or “All repositories”, clears it)
→ LabelPicker Open Label Settings for the highlighted label (on the “All repositories” row it only shows a “Select a label to edit its settings” status hint)
Home / End / PgUp / PgDn Fuzzy pickers Jump to top / bottom or page through the match list. Works in all fuzzy picker overlays: label picker, Jump-to-Repo, add/bulk-add repo scanners, and branch/file/commit/tag searches
ctrl+f Normal Open global code search popup overlay
p Normal Toggle pin status of selected item (pinned repositories stay at the top of the list in every sort order, above a thin rule)
* Normal Toggle Favorite / Star status of selected item
Space Normal Toggle selection of item for batch operations (fetch, delete, external shell)
y Normal Yank absolute path of selected item to clipboard
/ Normal Open fuzzy Jump-to-Repo picker overlay
o Normal Cycle list sorting mode (Custom → Alphabetical → Recent → Changes). While a label filter whose Label Settings set Sort By is active, cycles that label’s sort instead of the global
O Normal Toggle list sorting direction (ascending vs. reversed). While a label filter whose Label Settings set Sort Reverse is active, flips that label’s direction instead of the global
g Normal Launch the preferred Git client in the highlighted repository (configurable in settings, default is gitui); does nothing on a group header
t Normal Open the embedded terminal panel in the selected repository’s directory
T Normal Suspend the TUI and spawn a full-screen shell in each multi-selected repository’s directory (clearing the selection), else in the highlighted repository’s; does nothing on a group header
ctrl+t Global / Anywhere Toggle the embedded terminal panel (show + focus / hide; also unfocuses it)
ctrl+p Normal / Detail Open the command palette: fuzzy-find every action available in the current view (with its current key) and run it by name
↑ / ↓ / PgUp / PgDn / Home / End Command Palette Move through the matching actions
Enter Command Palette Run the highlighted action (exactly as its key would, including custom bindings)
Esc / ctrl+p Command Palette Close the palette without running anything
Shift+PgUp / Shift+PgDn Terminal panel (focused) Scroll the terminal’s output history; any keystroke snaps back to live view
s Normal Open options/settings page
d Normal Open debug logs panel
V Normal Show about popup / creator profile
v Normal Cycle between standard cards, compact 1-row view, and tile grid view. While a label filter whose Label Settings set View Mode is active, cycles that label’s layout instead of the global
h Normal Show signs & symbols legend popup
U Normal Open App Usage Stats Dashboard
u Normal Check for application updates manually
. Normal / Detail Toggle status bar between collapsed and expanded view
Enter / → Normal / Commits list Open Detail view for selected item (in Tile view → moves the selection right instead) / Inspect selected commit
? Normal / Help Toggle the shortcut overlay
ctrl+q Global / Anywhere Quit application from anywhere
Esc Normal Clear active search filter or cancel all repository selections
Enter Editing / Input Modals Save / submit typed text and persist
Esc Editing / Input Modals Cancel modal input without saving (letters like q/Q are typed as regular input)
ctrl+v / Terminal Paste Editing / Input Modals Paste text from system clipboard (strips newlines for single-line inputs)
Esc RepoSearchInput Clear repository search and return to Normal mode
Esc GlobalSearch Return to Normal mode
Tab GlobalSearch Toggle focus between search query input and results
↑ / ↓ GlobalSearch Navigate search results
Enter (Query focus) GlobalSearch Trigger/execute search scan
Enter (Results focus) GlobalSearch Select matched result, jump to repository, and open Detail view
Char GlobalSearch Type query (when input is focused)
Backspace GlobalSearch Erase query character (when input is focused)
Enter Settings (Edit) Save settings edit
Esc Settings (Edit) Cancel settings edit
Esc / q Settings Return to the category sidebar (from the fields panel), or to Home if the sidebar is already focused
Q Settings Exit Settings and return to Home
↑ / ↓ / k / j Settings Navigate setting fields / categories
Enter / Space Settings Toggle / Edit selected setting
Tab / Shift+Tab Settings Switch focus between category list (sidebar) and settings list
← / h Settings Focus category list (sidebar)
→ / l / w / W Settings Focus settings list
1 - 5 Settings Jump directly to category: General (1), Sorting (2), Scan (3), Theme (4), Keybindings (5)
Esc / q DebugLogs Exit Debug Logs (or clear filter if active) and return to Home
c / C / x DebugLogs Clear all debug logs and reset scroll
/ DebugLogs Enter fuzzy search query mode
Enter DebugLogs (Search) Finish typing query and lock focus to log list scrolling
Esc DebugLogs (Search) Clear query character/text or exit search mode
Backspace DebugLogs (Search) Erase query character
Char DebugLogs (Search) Type query character
↑ / ↓ / k / j DebugLogs Scroll debug logs list
PgUp / PgDn DebugLogs Scroll debug logs list by page size
Home / End DebugLogs Jump to top / bottom of debug logs
Backspace Editing Erase the character before the caret
← / → Editing / Input Modals Move the caret within the field. Fuzzy pickers keep the arrows for moving their selection.
Home / End Editing / Input Modals Move the caret to the start / end of the field
Delete Editing / Input Modals Erase the character under the caret
Tab / ↑ / ↓ Tag Creation Switch focus between Tag Name and Tag Message input fields
y / Y Confirm Dialog Confirm action (delete item/branch/tag/stash/remote/submodule, push branch/tag/all tags, tag overwrite, abort/continue merge, checkout of a branch, tag, commit or issue/PR branch, track launch directory). Enter also confirms non-destructive dialogs (checkouts, pushes, merges); on destructive ones it cancels
f / F Confirm Dialog Force push tag (--force) in Tag Push confirmation dialog
t / T Confirm Dialog Push branch with tags (--tags) in Branch Push confirmation dialog
n / N / Esc Confirm Dialog Cancel action
? / Esc / q / Q Help Close the help overlay
Esc / q / Q Detail Return to the list (from the Advanced tab group, the first press steps back to the Primary tabs; an open full diff or commit search is closed first)
Tab / Shift+Tab Detail Cycle active detail view tabs within the active group (Primary vs. Advanced)
w / W Detail Cycle panel focus forward (w) / backward (W)
+ / - Detail Grow (+) or shrink (-) the focused panel by moving its layout split (same splits the mouse can drag)
1 - 7 Detail Jump directly to Primary tab: Workspace (1), Files (2), Graph (3), Branches (4), Tags (5), Remotes (6), Stashes (7)
1 - 5 Detail Jump directly to Advanced tab: Worktrees (1), Submodules (2), Reflog (3), Issues (4), PRs (5) (when Advanced group is active)
Z Detail Toggle between Primary and Advanced tab groups
O Detail Toggle full-screen repository Overview overlay
↑ / k / K Detail Move selection or scroll list/diff/tree up
↓ / j / J Detail Move selection or scroll list/diff/tree down
PgUp / PgDn Detail / Normal / Settings Scroll list/diff/tree/settings by configured page_size
Home / End Detail / Normal / Settings Jump to top / bottom of list/diff/tree/settings
Enter Detail Stage/Unstage file (Workspace tab), checkout branch (Branches tab), checkout tag (Tags tab), open worktree in new context (Worktrees tab), checkout commit (Reflog tab; also Space; asks confirmation), checkout the issue’s or PR’s branch (Issues / PRs tabs; asks confirmation), or Inspect commit
f / F Detail Fetch remote repository (Branches / Tags / Remotes tabs)
p Detail Pull selected local branch from remote (Branches tab), Push selected tag (Tags tab; asks confirmation), or Prune stale worktree metadata (Worktrees tab)
Shift+P Detail Push selected local branch to remote (Branches tab) or Push all tags (Tags tab; asks confirmation)
← / → Detail Focus Local/Remote branch list (Branches tab only; on the Tags tab switch local/remote focus with w / W or the mouse)
> / → / Enter Detail Expand / toggle selected folder (Files tab)
< / , Detail Collapse selected folder (Files tab)
← Detail Collapse all folders (Files tab)
/ Detail Fuzzy find files (Files tab) / commits (Workspace commits list / Logs view) / branches (Branches tab) / tags (Tags tab)
e / o Detail Open selected file in configured terminal editor (Files tab)
Shift+H Detail View selected file’s commit/revision history (Files tab)
c Detail Open commit prompt (Workspace tab or Inspect view), or Create branch from HEAD (Branches tab)
C Detail Open commit prompt with Amend (Workspace tab or Inspect view)
a Detail Toggle “Assigned to me” / “All Open” issues (Issues tab), Stage All (a/A, Workspace tab Unstaged focus) / Unstage All (a/A, Workspace tab Staged focus), Apply stash (Stashes tab), Add worktree (Worktrees tab; an existing branch, tag or commit, or a new branch name to create), Add remote (a/A, Remotes tab), or Add submodule (Submodules tab)
n Detail Add line comment to selected PR (PRs tab; asks for file path, line and comment in turn), or Toggle line numbers in content viewer (n/N, Files tab)
b / B Detail Toggle git blame panel (Files tab), or Create branch at selected commit (Workspace commits list)
t / T Detail Create tag at selected commit (Workspace commits list)
y / Y Detail Yank selected commit hash (Workspace commits list)
v / V Detail Revert selected commit (Workspace commits list; asks confirmation)
p / P Detail Cherry-pick selected commit (Workspace commits list; asks confirmation)
x Detail Discard selected file changes (Workspace tab, Inspect view, or Files tab via x/X; asks confirmation), or discard the selected hunk/line (x / Delete, Workspace diff / Inspect StagingDetails focus; applies immediately)
X Detail Discard all changes in repository (Workspace tab or Inspect view; asks confirmation)
i / I Detail Interactive rebase from selected commit (Workspace tab commits list), or interactive rebase of the current branch onto the selected branch (Branches tab; asks confirmation)
G Detail Load more commits (Workspace commits list / Logs view)
l Detail Open Logs view (Workspace tab commits list focus), Toggle line-by-line staging mode (l/L, Workspace diff / Inspect StagingDetails focus), or Toggle lock status (Worktrees tab; asks reason/unlocks)
D Detail Delete selected branch (Branches tab; asks confirmation), tag (Tags tab; asks confirmation), stash (Stashes tab; asks confirmation), remote (Remotes tab; asks confirmation), submodule (Submodules tab; asks confirmation), or remove worktree and its folder (Worktrees tab; 1 only if it is clean, 2 force-remove discarding uncommitted changes)
s / S Detail Stage selected hunk/line (Workspace tab StagingDetails focus), open Stashing UI overlay (Workspace tab files list focus), Prompt to save stash (Stashing UI / Stashes tab), or Open Repository Settings popup (Overview overlay)
u / U Detail Unstage selected hunk/line (Workspace tab StagingDetails focus), or Toggle “Stash untracked files” option (Stashing UI)
i Detail Toggle “Keep index” option (Stashing UI)
Ctrl+U Input (Stash) Toggle “Stash untracked files” option (Stash Create popup)
Ctrl+I Input (Stash) Toggle “Keep index” option (Stash Create popup)
m Detail Merge selected branch into current branch (Branches tab; asks confirmation)
M Detail Checkout selected local branch and merge the current branch into it (Branches tab, Local panel; asks confirmation). With the Remote panel focused, M falls through to a plain merge of the selected branch, same as m
r Detail Rebase current branch onto selected branch (Branches tab; asks confirmation)
o Detail Checkout selected commit (Workspace commits list; asks confirmation), Open selected issue/PR in web browser (Forge tabs), or Accept OURS version of conflict (Workspace tab or Inspect view, Conflicts / ConflictDiff). O is reserved for the Overview overlay
t Detail Accept THEIRS version of conflict (Workspace tab or Inspect view, Conflicts / ConflictDiff)
r Detail Mark conflict as resolved (Workspace tab or Inspect view, Conflicts / ConflictDiff)
A Detail Abort the merge (Workspace tab or Inspect view, Conflicts / ConflictDiff; asks confirmation)
C Detail Continue the merge (Workspace tab or Inspect view, Conflicts / ConflictDiff; asks confirmation)
M Detail Open external mergetool (Workspace tab or Inspect view, Conflicts file list / ConflictDiff pane)
f Detail Open search column picker and go to logs (Workspace tab)
R Detail Resync the active tab state
? Detail Toggle detail help overlay
Esc / q / Q / ? DetailHelp Close detail help overlay
⌃S (Ctrl+S) CommitInput (Edit) Submit / execute Git commit directly from edit mode
⌃A (Ctrl+A) CommitInput (Edit) Toggle amend last commit option
⌃D (Ctrl+D) CommitInput (Edit) Maximize / restore the popup window size
⌃C (Ctrl+C) CommitInput (Edit) Finish editing commit message (switches to confirm state)
⌃H (Ctrl+H) CommitInput (Edit) Open commit history picker
⌃U (Ctrl+U) CommitInput (Edit) Clear entire commit message buffer
⌃K (Ctrl+K) CommitInput (Edit) Kill (delete) text from cursor to end of line
⌃W (Ctrl+W) CommitInput (Edit) Delete the word before the cursor
⌃B / ⌃F (Ctrl+B / Ctrl+F) CommitInput (Edit) Move cursor left / right
⌃P / ⌃N (Ctrl+P / Ctrl+N) CommitInput (Edit) Move cursor one line up / down
↵ (Enter) CommitInput (Edit) Insert a newline
Backspace CommitInput (Edit) Erase one character from commit message
Esc CommitInput Cancel commit and return to Detail view (in confirm state q also closes)
↵ (Enter) CommitInput (Confirm) Submit / execute Git commit
e / E CommitInput (Confirm) Edit / resume typing commit message
a / Space CommitInput (Confirm) Toggle amend last commit option
d / D / m / M CommitInput (Confirm) Maximize / restore the popup window size
x / X / u / U CommitInput (Confirm) Clear entire commit message buffer
Left-Click (Mouse) Normal Select the clicked item
Double-Click (Mouse) Normal Open Detail view for clicked item
Left-Click (Mouse) Detail Shift focus to the clicked panel or change active tab
Left-Click + Drag (Mouse) Detail Drag panel boundary splitters to dynamically resize layout splits
Scroll Wheel (Mouse) Normal / Detail Scroll selected list, graph view, branches, tree items, or unified diffs

Press ? at any time in normal mode to see the full keybinding reference as a centered popup. The help overlay only handles the dismissal keys — your selection and scroll position are preserved underneath.

The selected card’s border color mirrors the current operation mode:

The selected item is marked with a left-edge ▌ accent, a colored border, and bold text. In ADDING and EDITING modes the real terminal cursor sits at the end of your input so you can see exactly where the next character will land.

Repository Settings Popup controls:

When viewing the Repository Settings popup (entered via s on the repository Overview page):

Label Settings Popup controls:

When viewing the Label Settings popup (entered via → on a highlighted label in the label picker). Settings chosen here apply to every repository carrying that label, resolved between the per-repo override and the global default (repo → label → global):

Customizing Keybindings

All bindings are stored in keybindings.toml next to your config.toml (e.g. ~/.gitwig/keybindings.toml or ~/.config/gitwig/keybindings.toml). Edit them in-app via Settings (s) → Keybindings, or in the file directly — each action holds a keys list, for example:

[navigation.grow_panel]
keys = ["+"]
description = "Grow the focused panel"

Entries in this file override the built-in defaults. Actions missing from the file are backfilled with their defaults on startup, but existing entries are generally not rewritten — so if a default changes in a newer Gitwig version (for example, panel grow was briefly bound to both + and = in development builds before settling on + alone), a previously written entry keeps the old keys until you edit it or delete the entry to re-adopt the default. The exception is a default that a newer version extended: an entry still holding exactly the old default was never customised, so it is moved onto the new one (so far only detail.move_up / detail.move_down, which gained K / J). An entry you changed is always left alone.

Not every key is configurable yet. The following views still match their keys in code and ignore keybindings.toml (only their generic navigation keys — ↑/↓/PgUp/PgDn/Home/End/Enter/Esc — follow the [navigation] section):