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:
| Button | What 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:
| Action | What it does |
|---|---|
| Fetch | Update remote-tracking refs |
| Pull (Fast-forward Only) | Pull, refusing to create a merge commit |
| Push | Push the current branch |
| Publish Branch | Push a branch that has no upstream yet, picking the remote when there's more than one |
| Sync Changes | Fast-forward pull, then push |
| Stash All Changes | Stash everything, untracked files included |
| Pop Stash | Restore 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.