Skip to content

Git panel

The Git panel (Git icon in the side dock) lets you operate your repositories without leaving the app — and it’s multi-repository: it automatically detects every Git repo inside the workspace, including subfolders with their own repository, and lets you switch between them.

The Git panel: repository changes and commits without touching the terminal.
  • See the repository status: modified, new and deleted files.
  • Review each file’s changes before committing.
  • Commit straight from the interface.

At the top of the panel there are two labelled tabs with a counter: Changes —with the number of pending files— and History. They used to be a single unlabelled icon button.

In Changes, a single click on a file opens its diff in an editor tab; Ctrl+click (or ⌘+click) opens it in a separate tab.

The History tab is a vertical list of commits: the message in bold, an avatar with the author’s initials, their name and the relative time (“4 hours ago”) in the app’s language, plus the labels of the branches and tags pointing at that commit.

  • “Search by message, author or hash” filters the list as you type.
  • “Select branch to compare…” tells you in one sentence how many commits a branch is ahead of and behind the current one.
  • History is fetched 100 at a time: at the end there is “Load 100 more commits”, so a repository with thousands of commits does not block the panel.
  • The arrow keys walk the list.

Picking a commit opens its detail: message, author and date, the short hash with a copy button (“Copy the full hash”), the +N −M summary and the list of “N changed files” with their status —added, modified, deleted, renamed— and their counters. Diffs are fetched file by file, so a huge commit is not downloaded whole until you click one.

Commits that are not on the remote yet carry a ↑ pill (“Not pushed yet”), and above the list there is a summary strip: “N commits to push · Push” and “M to pull · Pull”, wired to the buttons the panel already had. If the branch has no tracking branch, the strip says “This branch has no remote · Publish branch” and nothing is marked: with no remote to compare against, making it up would be lying. The count comes from Git, not from the commits loaded on screen.

A click on a file —in Changes or inside a commit— opens (or updates) the editor’s diff tab, built with the same Monaco that Developer uses:

  • A minimap on the right with the added and deleted lines.
  • Change markers in the scrollbar, to jump from one to the next.
  • Line numbers on both sides and syntax highlighting by extension.
  • Unchanged regions folded, so you only see what matters.
  • “Side-by-side view” ⇄ “Unified view” with one button.

The tab is reused for every file you click, so browsing a commit does not leave twenty tabs open; with Ctrl+click (⌘+click) you open a separate tab that is no longer replaced. Inside the panel a “Preview here” remains, folded and off by default —the panel column is narrow and the diff read badly there—, with its “Compact viewer (no editor)” fallback for when either side of the file goes over 2 MB or Git cannot provide both texts. Binary files say so (“Binary file: there is no diff to show.”) instead of trying to render anything.

Both a commit’s file list and the Changes list are shown grouped by folder, as an accordion: each folder carries its file count and its aggregated +/−, and single-folder chains are compacted into one row (src/components/git) instead of burning three levels. There are “Collapse all” and “Expand all”, a “View as tree” / “View as list” switch that is remembered, and the ↑ ↓ ← → arrows and Enter to move, fold and open without leaving the keyboard.

The panel can write the commit message for you: it analyzes the uncommitted changes and proposes a message describing them. You can pick which provider and model does the writing with its own selector — for example, a free local model for commit messages even if your main chat uses a paid one. The proposed message can be edited before committing, like any other.