Nermal
Git

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.

The Nermalsource control panel
Placeholder — screenshot: the Source Control panel with staged and unstaged groups and a commit box

Changes

Files are grouped by what git thinks of them:

Group
Merge ChangesConflicts, with Resolve Conflict and Mark as Resolved
Staged ChangesWhat the next commit will contain
ChangesModified but not staged
UntrackedNew 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:

CommitCommit what is staged
Commit AllStage everything, then commit
Commit (Amend)Replace the last commit — confirms first, because anyone who already has it has to reconcile
Commit & PushCommit, then push
Commit & SyncCommit, 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 listClick 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 · PushIndividually
Switch RepositoryOnly 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 CommitApply 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.

Sponsor