Band Band

Changes view

The Changes view is Band's built-in diff reviewer for the active workspace. It shows every modified, added, deleted, untracked, and renamed file in the worktree, lets you read the changes inline with syntax highlighting, and gives you the basic git actions you usually run from a terminal — revert a single file, or stage and commit everything from a dialog.

Open it as its own pane (drag and drop a Changes pane anywhere in the layout) or focus it from the keyboard with ⇧⌘G. Like every other pane in Band, it lives inside the flexible layout — resize it, split it next to the editor, or stack it as a tab.

The Band Changes view in a workspace. The file tree sidebar lists the modified files on the left. The toolbar at the top of the diff pane shows the head branch and compare-target dropdown next to action icons for commit, git pull, git push, reload, find, expand all, and the unified/split view toggle. Two files are expanded below in split view, each showing old code on the left and new code on the right with green and red highlights for additions and deletions.
The Changes view — file tree sidebar on the left, branch picker and toolbar actions up top, and split-view diffs underneath.

What it shows

Each entry in the file list reports its git status with a short badge:

  • M — modified.
  • A — added (newly tracked).
  • D — deleted.
  • R — renamed.
  • U — untracked (a new file that has not been added yet).

Clicking a file in the sidebar tree expands its diff and scrolls it to the top of the viewport. Clicking the file again, or the chevron in its header, collapses it. The active file in view is highlighted in the tree so you always know where you are in a long change set.

Comparing against a branch

By default the Changes view shows the diff between the workspace's HEAD and the project's default branch (e.g. main). The branch picker in the toolbar lets you change that target on the fly:

  • Uncommitted — show only what has not been committed yet (the working tree vs HEAD). Useful when you've already made commits on the branch and only want to review what is still pending.
  • Any branch — pick another branch to compare against. Band uses git merge-base so you see only the changes introduced by your branch, not unrelated commits that have landed on the target.

Your selection is remembered per workspace, so coming back to a workspace later restores the same compare target.

Reading diffs

  • Unified view stacks deletions on top of insertions in a single column — the default in narrow panes.
  • Split view shows the old file on the left and the new file on the right. Available when the pane is wide enough to be readable; below that threshold the view falls back to unified automatically.
  • Expand context — the dashed separators between hunks expand more lines around the change. Click repeatedly to widen the context, or use Show full file to load the entire file at once.
  • Find in changes (⌘F) searches across every open diff in the pane — case-sensitive, whole-word, and regex modes are all supported.

Line numbers reflect the real file line numbers (mapped through the diff hunk headers), not the position in the trimmed diff — so jumping to a line in the editor lines up with what the diff shows.

Per-file actions

The header of each file row carries three quick actions:

  • Copy file path — puts the path on the clipboard, handy for sharing or pasting into a terminal.
  • Open in code browser — jumps to the file in Band's editor pane, scrolled to the first changed line.
  • Revert file — restores the file to its state on the compare target. For added or untracked files this deletes the file; for modified, deleted, or renamed files it runs git checkout against the merge base. A confirmation dialog explains exactly what will happen for the file's status before anything is touched.

Commit changes

The toolbar's Commit button (the git-commit icon next to Reload changes) opens the commit dialog. From there you can stage every change in the worktree — tracked and untracked — and create a commit on the workspace's current branch without leaving the Changes view.

The Band commit dialog. The header reads 'Commit changes / Stage and commit 8 changed files.' Two fields are shown: a Message input ('Short summary of the change') and a Details textarea ('Explain why this change is being made…'). The footer has an Auto-generate button on the left with a sparkles icon, and Cancel and Commit buttons on the right.
The commit dialog — subject, optional body, and an Auto-generate button that asks the default coding agent to write the message.

The dialog has two fields:

  • Message — the commit subject. Capped at 200 characters in the input; the convention in most projects is to keep it under 72.
  • Details (optional) — the commit body. Use it to explain why the change is being made, link to issues, or call out follow-up work. If you leave this empty Band sends only the subject to git.

When you click Commit, Band runs git add -A followed by a single git commit in the workspace's worktree. The Changes view refreshes immediately so the diff reflects the new HEAD.

Auto-generate the message

The Auto-generate button asks your default coding agent — the one set in Settings — to write the commit message for you. The agent runs as a short-lived, one-shot session rooted at the worktree, with its normal Bash and file-read tools available, and is instructed to:

  1. Run git status and git diff HEAD to see what changed.
  2. Optionally peek at recent commits or surrounding files to match the project's commit style.
  3. Output a single commit message in subject + body format.

Because the agent reads the diff itself with tools, the message stays accurate even on large change sets — nothing has to be truncated into the prompt. When the agent is done, the subject and body are written into the dialog so you can edit them before committing. A small note under the fields shows which agent produced the suggestion.

If you press Commit while the message field is empty, Band will auto-generate and commit in one step — useful when you trust the agent's summary and want to keep moving. If no coding agent is configured at all, Band falls back to a built-in Claude Code definition; if that fails too, the dialog surfaces the error inline so you can fix it (or type the message yourself).

Pre-commit hooks

The commit runs in your worktree exactly the way it would from a terminal, so any pre-commit hook configured in the repository (Husky, lefthook, native git hooks, etc.) executes normally. If a hook fails, the commit is aborted and the dialog shows the hook's error output so you can fix the underlying issue and try again. Band does not pass --no-verify — checks are not skipped behind your back.

Git pull and push

The toolbar also exposes the two most common branch-sync actions:

  • Git pull — runs git pull --rebase in the workspace's worktree, then refreshes the diff so the change set reflects the new HEAD.
  • Git push — runs git push; if the branch has no upstream yet, Band falls back to git push --set-upstream origin <branch> automatically.

While a pull or push is in flight, the button shows a spinner and the rest of the git actions are disabled to avoid concurrent operations on the same worktree. Successes and failures appear briefly above the bottom status bar — success messages auto-dismiss after a couple of seconds, errors stick around with a × to close them so you can read git's output (e.g. rejected, non-fast-forward or merge conflicts).

Both actions are also available from the workspace context menu on the project sidebar — the toolbar buttons are simply a convenience for users who already have the diff open.

Auto-refresh

The Changes view stays in sync with the worktree without you having to hit reload. Band runs a branch-status poller that watches the workspace for git activity (commits made elsewhere, files written by the agent, branch checkouts from a terminal) and pushes updates over the same Server-Sent Events stream the rest of the dashboard uses. When something changes, the file list refreshes; expanded files re-fetch their diffs while preserving your context-expansion and scroll position.

There's also a manual Reload button in the toolbar for the rare case you want to force a refresh.

Keyboard shortcuts

  • ⇧⌘G — show / focus the Changes pane.
  • ⌘F — open Find in changes within the active diff pane.