Keyboard shortcuts
These are the default keys. Press ? in tt-git to see the keys for
the focused pane, including any you’ve changed; type to search them. To change
a key, see Key bindings. The name in brackets after
each pane is its context in config.toml.
Uppercase letters mean shift: P is shift+p.
Everywhere global
Section titled “Everywhere global”These work in every pane unless the pane uses the same key for something else.
| Key | Does |
|---|---|
| 1 2 3 4 | Focus the graph / status / branches / details. |
| tab / shift+tab | Focus the next / previous pane. |
| ctrl+h ctrl+j ctrl+k ctrl+l | Focus the pane to the left / below / above / to the right. |
| + | Zoom: the focused pane (details, or else the graph) fullscreen, and back. |
| j ↓ / k ↑ | Move down / up. |
| ctrl+d pagedown / ctrl+u pageup | Page down / up. |
| g home / G end | Top / bottom. |
| P | Push. Sets the upstream on the first push. |
| p | Pull. |
| z | Undo the last checkout, commit, reset or rebase. |
| ctrl+r | Refresh everything. |
| : ctrl+p | Command palette. |
| ? | Help: the focused pane’s keys. |
| q ctrl+c | Quit. |
Graph graph
Section titled “Graph graph”| Key | Does |
|---|---|
| enter | Open the commit fullscreen: changed files on the left, the selected file’s diff on the right. |
| space | Show / hide the commit’s details. |
| esc | Hide details. With details already hidden: clear the filter. |
| a | All branches ↔ the current branch (and its upstream). |
| t | Dates as age ↔ local date and time. |
| f | Filter by author or by file or folder. |
| o | Check out the selected commit: the local branch on it, else the commit with HEAD detached. Asks to stash uncommitted changes first. |
| n | New branch at the selected commit. |
| T | New tag at the selected commit. tab in the dialog makes it annotated. |
| M | Merge the commit into the current branch. |
| r | Rebase the current branch onto the commit. |
| C | Cherry-pick the commit. |
| c | Copy the commit hash. |
| A | Ask an AI agent about the commit. See Agent actions. |
| ] } / [ { | Next / previous branches pane tab. Focus stays on the graph. |
See Graph.
The filter panel
Section titled “The filter panel”| Key | Does |
|---|---|
| type | Narrow the list. |
| tab shift+tab ← → | Switch between the Author and File tabs. |
| ↑ ↓, ctrl+p ctrl+n | Move. |
| pageup pagedown | Page. |
| backspace, ctrl+u | Delete a character, clear what you typed. |
| enter | Apply. On the File tab with no match, uses what you typed as the path. |
| esc | Close without changing the filter. |
Details details
Section titled “Details details”| Key | Does |
|---|---|
| j k, pageup pagedown | Scroll. In the files view, j k pick a file. |
| } | Show / hide the commit’s changed files below the diff. Fullscreen puts them on the left. |
| o | Open the link in view with a plugin link handler. |
| e | Open the file in view in your editor, at the line at the top of the diff. |
| b | Blame the file in view as of that commit, at the line at the top of the diff. |
| esc space | Close details. |
See Details.
Status status
Section titled “Status status”| Key | Does |
|---|---|
| space | Stage / unstage the file. On a conflicted file, mark it resolved. |
| enter | Open the file’s changes to stage them by hunk or line. |
| a | Stage everything, or unstage everything if it’s all staged. |
| d | Discard the file’s changes (asks first). |
| c | Commit what’s staged. |
| A | Amend the last commit with what’s staged, keeping its message. |
| s | Stash. |
| e | Open the file in your editor at its first change, or a conflicted file at its first conflict marker. |
| b | Blame the file in the working tree. |
| C | Continue a merge, rebase or cherry-pick. |
| X | Abort a merge, rebase or cherry-pick (asks first). |
See Status.
Staging stage
Section titled “Staging stage”The staging view, opened with enter on a file in the status pane.
| Key | Does |
|---|---|
| j / k | Next / previous hunk, or changed line in line mode. |
| space | Stage the selection, or unstage it on the staged side. |
| tab | Switch between the unstaged and staged changes. |
| a | Pick single lines instead of whole hunks, and back. |
| v | Start or end a range of lines. |
| d | Discard the selection from the working tree (asks first). |
| c | Commit what’s staged. |
| e | Open the file in your editor at the selected hunk or line. |
| esc | Back to the status pane. |
Blame blame
Section titled “Blame blame”Blame, opened with b on a file in the status pane or details. j k, ctrl+d ctrl+u and g G move as everywhere else.
| Key | Does |
|---|---|
| ctrl+g | Go to a line: type its number and press enter. |
| digits, then G / g | Vim style: 42G goes to line 42, 5j / 5k move five lines. esc drops the count. While blame is focused, digits count instead of switching panes. |
| enter | Open the line’s commit fullscreen, scrolled to the line. esc comes back. |
| space | Show / hide the line’s commit details below the code. |
| [ | Step back: blame the file as it was just before the line’s commit. |
| ] | Forward again, to the newer version you stepped back from. |
| { | Back one commit of the file: the version before the one shown, whichever lines changed. |
| } | Forward one commit of the file, toward the version below it. |
| / | Search the code with a regex, jumping as you type. enter keeps it, esc drops it. |
| n N | Next / previous line matching the search. |
| t | Ages ↔ local dates and times. Shared with the graph. |
| e | Open the file in your editor at the selected line. |
| c | Copy the line’s commit hash. |
| esc | Back to where you opened blame. |
See Blame.
Branches branches
Section titled “Branches branches”On the Branches, Tags, Unmerged and Merged tabs.
| Key | Does |
|---|---|
| enter space | Check out. A remote-only branch gets a local tracking branch. |
| n | New branch from the selection. |
| d | Delete. Asks before force-deleting an unmerged branch, or deleting a remote branch or a tag. For a tag, r in the dialog deletes it on the remote too. |
| R | Rename a local branch. |
| T | New tag at the selection’s commit. tab in the dialog makes it annotated. |
| P | On the Tags tab: push the selected tag. Elsewhere: push the current branch. |
| f | git fetch --all --prune. |
| / | Filter the tab as you type. |
| ] } / [ { | Next / previous tab. |
| b | Pick the base branch. |
| M | Merge the selection into the current branch. |
| r | Rebase the current branch onto the selection. |
| c | Copy the name. |
While you type a filter: enter keeps it and goes back to the keys above, esc clears it, ↑ ↓ move, and backspace deletes a character.
See Branches, Merged and unmerged and Tags.
Stash stash
Section titled “Stash stash”The branches pane on its Stash tab. These keys don’t fall back to the branches pane’s.
| Key | Does |
|---|---|
| space | Pop: apply the stash, then drop it. |
| a | Apply it and keep it. |
| d | Drop it (asks first). |
| n | New branch from it, at the commit it was made on. |
| enter | Show what it holds, untracked files included. |
| / | Filter as you type. |
| ] } / [ { | Next / previous tab. |
See Stash.
Worktrees worktrees
Section titled “Worktrees worktrees”The branches pane on its Worktrees tab. These keys don’t fall back to the branches pane’s.
| Key | Does |
|---|---|
| enter space | Open the worktree in place of this one. |
| n | New branch in a new worktree, from the selected one. |
| d | Remove the worktree (asks first; asks again before --force if it has changes). |
| c | Copy its absolute path. |
| / | Filter as you type. |
| ] } / [ { | Next / previous tab. |
See Worktrees.
Dialogs and popups
Section titled “Dialogs and popups”These are fixed and can’t be rebound.
| Where | Key | Does |
|---|---|---|
| Text prompts (commit message, branch name, stash) | enter | Confirm. |
| esc | Cancel. | |
| tab shift+tab | New branch: create it in a worktree, or not. Stash: what to stash. | |
| backspace, ctrl+u | Delete a character, clear the text. | |
| Yes/no questions | y enter | Yes. |
| n esc | No. | |
| Palette and pickers | type | Narrow the list. |
| ↑ ↓, ctrl+p ctrl+n | Move. | |
| enter / esc | Run / close. | |
| Help popup | type | Search the keys. |
| backspace, ctrl+u | Edit the search. | |
| esc, or ? with nothing typed | Close. | |
| Error popup | esc enter q | Dismiss. |
Plugin panes
Section titled “Plugin panes”| Key | Does |
|---|---|
| ctrl+\ f12 | Leave a split pane (it keeps running), or close an overlay or popup. |
| any other key | Goes to the plugin. |
Change these with [plugins] pane_release_keys. See
Plugin panes.
With mouse = true (the default):
| Action | Does |
|---|---|
| Click a pane or row | Focus the pane and select the row. |
| Double-click a commit in the graph | Open it fullscreen with its changed files, as enter does. |
| Click a tab in the branches pane’s title | Switch to that tab. |
| Click a file in the details files view | Show its diff. |
| Click a line in blame | Select it. |
| Click an entry in Filter graph | Filter the graph by it. A click outside the popup closes it. |
| Scroll the wheel | Scroll the pane under the pointer (in the details files view, the diff when over it). |
| ctrl+click a link in details | Open it with a plugin link handler. |