Source control
Stage, commit, branch, and push from the panel beside your terminal.
The Source Control tab of the side panel (⌘ J)
is a full git client for whichever repository the focused pane is in. It follows
the pane: cd into another repository and the panel switches with you.
Changes
Files are grouped by what git thinks of them:
| Group | |
|---|---|
| Merge Changes | Conflicts, with Resolve Conflict and Mark as Resolved |
| Staged Changes | What the next commit will contain |
| Changes | Modified but not staged |
| Untracked | New files |
Each row has Stage Changes, Unstage Changes, Discard Changes, and Open Changes — which opens the diff. Group-level Stage All, Unstage All, and Discard All sit on the headers, and the destructive ones confirm first.
Committing
Write the message in the box at the top and pick a commit action:
| Commit | Commit what is staged |
| Commit All | Stage everything, then commit |
| Commit (Amend) | Replace the last commit — confirms first, because anyone who already has it has to reconcile |
| Commit & Push | Commit, then push |
| Commit & Sync | Commit, then pull and push |
⌘ ⏎ commits while the caret is in the message box. Stash All is there too.
Branches and remotes
The branch name at the top of the panel is a dropdown. It holds:
| The branch list | Click one to check it out. Past a dozen branches the list scrolls instead of growing past the window |
| Create Branch… | From here, or from any commit in the history |
| Fetch · Pull · Push | Individually |
| Switch Repository | Only when the window has panes in more than one repo |
Beside it, the sync button pulls then pushes — and relabels itself Publish Branch when the branch has no upstream yet.
The command palette carries the verbs under Git — Git: Commit, Stage All, Unstage All, Discard All, Create Branch, Sync, Push, Pull, Fetch — so those are bindable. Checking out is a pick rather than a verb, so it lives only in the dropdown.
Checking out does not stash for you. A dirty tree that would be clobbered makes git refuse the checkout, and Nermalshows you git's own refusal as a notification rather than working around it.
When a repository is mid-operation — merging, rebasing, cherry-picking, reverting, bisecting, applying — the panel says so instead of pretending everything is normal.
History
The History section header opens the commit graph: branches drawn as lanes, a filter box, Current Branch or All Branches, and Load more at the bottom.
Git: Toggle Commit History does the same from the keyboard. It ships with no default key — bind one under Settings → Keyboard Shortcuts.
Click a commit for its detail view — message, parents, and the files it touched, each openable as a diff. From a commit's menu:
| Checkout Commit · Create Branch Here… | Move to it |
| Cherry Pick · Revert Commit | Apply or undo it here |
| Reset (Soft / Mixed / Hard) | Move the branch to it — Hard confirms, since commits after it fall off the branch and uncommitted changes are discarded |
| Copy Commit SHA |
The history section starts collapsed and remembers whether you opened it
(scm_graph_expanded).
In the sidebar
You do not have to open the panel to know where you stand: every
sidebar row carries its pane's branch and a +N −M count of
the working tree, refreshed on cd and when a command finishes. Clicking the
counts opens the diff overlay.