Skip to content

Git Panel

The Git panel gives you a visual overview of your repository’s working tree and lets you stage files, review diffs, commit, push, and switch branches — all from the browser.

The Git panel is available whenever a session is connected to a runner with a working directory.

  • Desktop — click the branch icon button in the session header toolbar.
  • Mobile — open the session overflow menu (⋯) and tap Git.

The panel opens as a docked side panel. You can drag it to reposition it (left, right, or bottom) just like the Files or Terminal panels. Click the branch icon again (or the panel’s close button) to hide it.

When the panel opens, it automatically fetches git status for the session’s working directory and displays:

  • Branch name — shown at the top-left with a branch icon. Click it to open the branch selector.
  • Ahead / behind badges — green arrow-up (commits ahead of remote) and amber arrow-down (commits behind).
  • Push / Publish button — appears when you have commits to push. If the branch has no upstream tracking branch yet, the button reads Publish and sets the upstream automatically (--set-upstream).
  • Pull button — appears when the branch is behind its upstream. Clicking it does a fast-forward pull.
  • Sync dropdown — a Sync menu next to the pull/push buttons with additional pull, merge, and rebase options.
  • Refresh button — manually re-fetches git status at any time.

Below the header, changes are split into two groups:

SectionWhat it shows
Staged ChangesFiles already added to the index (ready to commit).
ChangesModified, added, deleted, renamed, or untracked files in the working tree.

Each section header has Stage All / Unstage All buttons. A list/tree view toggle at the bottom of the staging area lets you switch between a flat file list and a directory tree.

CodeMeaning
MModified
AAdded
DDeleted
RRenamed
CCopied
??Untracked
!!Ignored
MMModified in both index and working tree
AMAdded to index, then modified in working tree

When the working tree is clean, the panel shows a “Working tree clean” message.

Each file row has a + (stage) or (unstage) button on its left side:

  • Click + on an unstaged file to run git add on that file.
  • Click on a staged file to run git restore --staged on that file.

Bulk actions are available in each section header:

  • Stage All — stages every file in the Changes section.
  • Unstage All — unstages every file in the Staged Changes section.

After any stage/unstage operation, the panel automatically refreshes the status.

The commit form is pinned to the bottom of the panel on the Changes tab whenever there are changes in the working tree. It is not shown on the Stash, History, or Compare tabs.

  1. Stage the files you want to include.
  2. Type a commit message in the text area. It auto-resizes as you type (up to a maximum height).
  3. Click Commit or press Enter (macOS) / CtrlEnter (Windows/Linux).

The Commit button is disabled until at least one file is staged and the message is non-empty. While the commit is in progress, a spinner replaces the button icon.

After a successful commit, the message field clears and the status refreshes automatically.

In addition to the header Pull button (fast-forward only), the Sync dropdown offers:

OptionWhat it does
Pull (fast-forward)Fast-forward the current branch to the upstream tip.
Pull —rebaseFetch upstream and rebase local commits on top of it.
Merge into currentMerge another branch into the current branch.
Rebase ontoRebase the current branch onto another branch.

When a merge or rebase produces conflicts, a conflict-resolution bar appears at the top of the panel with Continue and Abort buttons (or Abort Merge during a merge). Resolve the conflicts in the working tree, then click Continue to finish the operation.

When your local branch is ahead of the remote, the header bar shows a push button:

  • Push — pushes to the existing upstream branch.
  • Publish — shown when the branch has no upstream yet; pushes and sets the upstream tracking branch (--set-upstream) in one step.

If a pull, merge, or rebase fails because there is no upstream configured, a toast appears with a Set upstream… action. Clicking it opens a prompt where you can enter the remote branch to set as upstream.

Click the branch name in the header to open the branch selector dropdown. It lists both local and remote branches, grouped under Local and Remote headings.

  • Search — a search field at the top filters branches by name as you type.
  • Current branch — highlighted with a green check mark.
  • Switch branches — click any branch to check it out. For remote branches, the panel creates a local tracking branch automatically.
  • Keyboard — press Escape to close the dropdown without switching.

While a checkout is in progress, a spinner replaces the dropdown chevron. After a successful checkout, the panel refreshes to show the new branch’s status.

Click any tracked file name in the staging area to open an inline diff view. (Untracked files don’t have a diff to show, so their rows are not clickable.)

The diff view displays a unified diff with color-coded lines:

ColorMeaning
GreenAdded lines (+)
RedRemoved lines (-)
BlueHunk headers (@@)
MutedContext lines and diff metadata

The file path is shown in the header. Click the back arrow or press Escape to return to the staging area.

You can view diffs for both staged and unstaged versions of a file — clicking a file in the Staged Changes section shows the staged diff, while clicking one in Changes shows the working-tree diff.

The Git panel has four tabs across the top:

TabWhat it shows
ChangesStaging area, diff viewer, and commit form.
StashExisting stash entries with buttons to push, pop, apply, or drop them.
HistoryCommit log for the current branch with subject, author, and date.
CompareDiff between two selected revisions.

Switch tabs by clicking their names. The Changes tab is where staging, committing, and most sync operations happen.

After any git operation (commit, push, pull, merge, rebase, stash, checkout, stage, unstage, set-upstream, and worktree changes), a brief toast appears below the header:

  • Green — operation succeeded, with a short summary.
  • Red — operation failed, with the error message.

Toasts dismiss automatically after 5 seconds or can be closed manually.

The Git panel covers common day-to-day operations but is not a full replacement for the terminal or the agent’s own git usage:

  • No interactive rebase. The panel can start a standard rebase and handle continue/abort, but it does not offer interactive rebase operations like rewording, squashing, or dropping commits.
  • No commit amend. Once a commit is created, you cannot amend it from the panel.
  • No partial staging (hunk-level). Staging operates on whole files — you cannot stage individual hunks or lines.
  • No file-level discard (checkout — file). You can unstage files but cannot discard working-tree changes from the panel.
  • Single-remote push only. The push button pushes to the default remote; multi-remote setups need the terminal.
  • Requires a connected runner. The panel is unavailable in read-only or disconnected sessions because it needs the runner’s GitService to execute commands.