| 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 item |
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) |
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 (no-op on the “All repositories” row) |
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 |
* |
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) |
O |
Normal | Toggle list sorting direction (ascending vs. reversed) |
g |
Normal | Launch the preferred Git client for selected repository (configurable in settings, default is gitui) |
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 the selected repository’s directory |
ctrl+t |
Global / Anywhere | Toggle the embedded terminal panel (show + focus / hide; also unfocuses it) |
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 |
h |
Normal | Show signs & symbols legend popup |
Shift+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 / 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 | 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 one character |
Tab |
Tag Creation | Switch focus between Tag Name and Tag Message input fields |
y / Y |
Confirm Dialog | Confirm action (delete item/branch/tag, push branch/tag/all tags, tag overwrite, abort/continue merge) |
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 |
Help | Close the help overlay |
Esc / q |
Detail | Return to the list |
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 |
Detail | Move selection or scroll list/diff/tree up |
↓ / 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), or Inspect commit |
F (or f/F in Remotes) |
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 (Workspace tab Unstaged focus) / Unstage All (Workspace tab Staged focus), Apply stash (Stashes tab), Add worktree (Worktrees tab), Add remote (a/A, Remotes tab), or Add submodule (Submodules tab) |
n |
Detail | Add line comment to selected PR (PRs tab), 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) |
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) |
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 (Worktrees tab; asks confirmation) |
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) |
r |
Detail | Rebase current branch onto selected branch (Branches tab; asks confirmation) |
o / O |
Detail | Checkout selected commit (Workspace commits list), Open selected issue/PR in web browser (o, Forge tabs), or Accept OURS version of conflict (Workspace tab or Inspect view, Conflicts / ConflictDiff) |
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 / ? |
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).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 never 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.