| 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.
When viewing the Repository Settings popup (entered via s on the repository Overview page):
↑ / ↓ / j / k — Navigate settings rows.Enter / Space — Toggle/Edit the selected setting:
Enter to confirm, Esc to cancel).← / → / h / l — Cycle options (Theme, Resync on Tab Change).Esc / q — Close repository settings popup and return to repository Detail view.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):
↑ / ↓ / j / k — Navigate settings rows.Enter / Space — Toggle/Edit the selected setting:
Enter to confirm, Esc to cancel).← / → / h / l — Cycle options (Theme, Resync on Tab Change, Sort By, Sort Reverse, View Mode). Sort By walks default → Custom → Alphabetical → Recent Visit → Latest Changes → default; Sort Reverse walks default → yes → no → default; View Mode walks default → Normal → Compact → Tile → default. All three apply only while that label’s filter is active; the sort rows re-sort the list at once if it is, and the View Mode row redraws it in the new layout.Esc — Return to the label picker.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):
f/F) and add remote (a/A) are hard-coded (there is no [branches] entry for them).Enter/→ folder toggle, ← collapse-all, and x/X discard are hard-coded; >, </,, and the rest of the [files] section are configurable.l/L from the commits list) and the per-file History view (H from the Files tab) hard-code every key they handle.