zshell

The git panel

Stage, review, commit, and push beside the shell that made the changes.

Press Cmd+Shift+G. The panel opens on the repository your project is anchored to — see the project directory for how Zshell picks it.

Every action here is a git command Zshell runs on your behalf, and the output is shown to you when something has more to say than "done". Nothing is rewritten, squashed, or force-pushed unless you asked for it.

The Git toolbar

Zshell can show a compact toolbar below the active tab. In a repository it shows the current branch and aggregate added/deleted line counts; an unchanged tree gets a green Clean state. Untracked files are included in the added count.

  • Click the branch to search and switch local branches. The repository's default branch is marked in the list.
  • Click the change counts to open the Git panel.
  • Outside a repository, Always Show mode leaves a No Git Repository button that opens the panel's initialization state.

Choose Hide, Auto, or Always Show under Settings → General, or set toolbar.visibility. The default is Hide. You can also hide a visible toolbar from its context menu.

Changed files

Files are grouped into conflicts, staged changes, and unstaged changes. Hover a row for its buttons, or use the context menu:

ButtonWhat it does
+Stage the file
Unstage it
Discard its changes

Discard All Changes sits in the panel header and asks for confirmation first — it's the one action here you can't undo with another git command.

Conflicted files show Mark Resolved (Stage) instead of a plain stage button, so resolving is a deliberate step rather than a side effect.

The funnel button in the header filters the list by filename, which is the fastest way through a large change.

Reading diffs

Click any changed file to open its diff in a pane, beside the terminal rather than on top of it. From the context menu you can also Open File (the file itself, editable) or Open File to the Side.

Large diffs stay responsive. A changeset with a thousand files in it opens as fast as a one-line one, and scrolls without stutter.

The controls above a diff remember two choices globally:

  • Unified / Split changes between one-column and side-by-side layout.
  • Review / Edit appears for an unstaged file in the live worktree. Edit the new side directly and save with Cmd+S; dirty-file close handling is the same as in the normal editor.

Staged and historical commit diffs stay read-only, because they are snapshots rather than files Zshell can safely write. Switching one diff to Edit or Split updates the preference for other open diffs without making an ineligible diff editable.

Committing

Type a message and use the commit button, or pick from its menu:

  • Commit Staged — commit exactly what you staged
  • Stage All & Commit — stage everything tracked, then commit
  • Amend Last Commit — fold the staged changes into the previous commit
  • Stage All & Amend

Recent commits are listed below, with Copy Commit Hash and Copy Commit Message in their context menus.

Branches

The branch name in the header is a menu: pick another branch to switch to it, or choose Create New Branch… to start one from where you are.

Worktrees

The Git panel lists every worktree belonging to the repository, together with its branch and checkout path. The active checkout is marked Current. Click a worktree to open a new terminal tab in that directory, so each checkout keeps its own shell context while remaining part of the same project.

Detached HEAD worktrees show Detached HEAD instead of a branch name. Bare repositories are listed for completeness, but they do not have a working directory and cannot be opened in a terminal tab.

Remotes

The menu holds everything that talks to a remote:

ActionWhat it does
FetchUpdate remote-tracking refs
Pull (Fast-forward Only)Pull, refusing to create a merge commit
PushPush the current branch
Publish BranchPush a branch that has no upstream yet, picking the remote when there's more than one
Sync ChangesFast-forward pull, then push
Stash All ChangesStash everything, untracked files included
Pop StashRestore the most recent stash

Badges beside the branch show how far ↓ behind and ↑ ahead of the upstream you are.

The same menu has Copy Changed Paths, Copy Repository Path, and Reveal Repository in Finder.

Pull is fast-forward only on purpose. If a real merge or rebase is needed, git says so and you decide in the terminal — the panel won't pick a strategy for you.

Not a repository yet

If the project directory has no repository, the panel offers Initialize Repository, which runs git init in that folder. Until then it stays out of the way.

On this page