Docs/Desktop/Power Features/Git Integration

Git Integration

Review, commit, sync, and switch branches inside Lanes. A full git client next to your agent, not just a diff viewer.

The Changes pane is a working git client. You can read what an agent did, commit it, publish or pull the branch, discard what you do not want, switch branches, and walk the history, without leaving Lanes or opening a second app. If you keep GitHub Desktop open beside your terminal, this is the panel that replaces it.

Opening the Changes Pane

Three ways in:

  • The Changes button in the app header.
  • Right-click a project in the sidebar and choose Changes.
  • Click the Changes (n) section, or the ahead/behind badges, in an issue's side panel.

The pane opens over the right edge of the window. Use the dock button in its header to pin it as a column instead, so it stays open while you work in the terminal.

The Header: Repository, Branch, and Sync

Three controls across the top:

  • Current Repository picks which linked project you are looking at. It only becomes clickable once more than one folder is linked.
  • Current Branch opens the branch picker (see below).
  • The sync button does whatever the branch needs next, and says so: Publish branch for a branch with no upstream, Pull changes, Push changes, Pull and Push when both directions are behind, or Up to date when there is nothing to do. Arrow pills show the ahead and behind counts.

Lanes fetches in the background about once a minute, so those counts reflect the remote without you asking. If a pull hits conflicts, Lanes says so plainly and leaves the resolution to git rather than half-finishing it.

When the pane is scoped to an issue's worktree, a banner names the worktree and its base branch, and the repository and branch controls are locked. That is deliberate: switching branches under a running agent is how work ends up on the wrong one.

The File List

The left column lists every file with uncommitted or untracked changes. Each row carries:

  • A change badge -- M modified, A added, D deleted, R renamed.
  • Line counts -- added and removed, so you can see the size of a change before opening it. Binary files are marked instead of counted.

Above the list, a filter box narrows a long list by path. Drag the divider to resize the column. The list refreshes every couple of seconds while the pane is open, so an agent's work appears as it happens.

Right-click any file for Discard Changes, Copy, Copy Path, or Open in to hand the file to VS Code, Cursor, Zed, or another external editor.

Viewing Diffs

Click a file to open its diff. It is the Monaco diff editor, the same one VS Code uses, with syntax highlighting for the file's language and unchanged regions collapsed so you are reading changes rather than scrolling past context.

The diff is inline, one column with additions and removals marked in place, and it is read-only. Edit the file in the editor instead.

What it compares against depends on scope. In a plain repository, the file is compared against the last commit. When the pane is scoped to an issue's worktree, it is compared against that worktree's base branch, so you see the whole change to that file rather than only the part that is not committed yet. A file that does not exist in the comparison point says so instead of showing every line as new.

Committing

The commit box sits under the file list, with a Summary (required) field and an optional Description. The button names its target, for example Commit to feature/thing, so you cannot commit to a branch you thought you had left.

One thing to know: committing stages everything. Lanes runs the equivalent of git add -A and then commits, so every change in the working tree goes in, not just the file you were looking at. There is no staging area in the pane and no per-file or per-hunk selection. If you need a partial commit, discard what you do not want first, or do that one from a terminal.

Discarding Changes

Discard Changes on a file's context menu reverts that file. Discard All in the action row reverts the whole working tree. Both ask first, because both are unrecoverable.

Switching Branches

Current Branch opens a picker grouped into Current branch, Default branch, Worktrees, and Branches, with local-only branches marked as such and a filter box for long lists.

  • New branch creates one, letting you choose the ref to branch from, then switches to it.
  • Set as my base marks a branch as this project's base, which is what diffs and worktrees compare against.
  • Delete branch removes a local branch.

If the working tree is dirty when you switch, Lanes asks what to do with the changes rather than refusing or clobbering them: bring them to the new branch, stash them on the current one, or keep them where they are. The Move button in the action row is the same choice, started from the changes instead of the branch.

History

The History tab lists recent commits with author, relative time, and any tags. Commits that have not been pushed are marked, so you can tell what is still local.

Click a commit to see the files it touched and each file's diff, scoped to that commit alone. That is the view for reviewing an agent's work step by step rather than as one cumulative blob.

On the most recent commit, and only while it is unpushed, right-click offers Uncommit, which keeps the changes and undoes the commit, and Discard commit, which throws both away. Neither is offered on a commit that already exists on the remote.

The Terminal and the Identity Line

The pane has a shell terminal at its foot, opened with Show terminal, already in the right working directory. It is there for the things a UI should not pretend to do: resolving a conflict, an interactive rebase, a git bisect.

Beside it, Lanes shows the git identity that commits from this repository will carry. Seeing the wrong name there before you commit is the entire point. See Git Identity to change it.

What This Pane Does Not Do

Worth stating plainly, so nothing surprises you mid-review:

  • No staging area. Staged and unstaged changes are one list, and committing includes everything.
  • No hunk or line staging, and no partial reverts within a file.
  • No side-by-side diff. Inline only.
  • No blame, and no merge-conflict resolution. Use the built-in terminal.

Tips

  • Dock the pane while reviewing. The file list stays put while you work in the terminal next to it.
  • Use History to follow an agent commit by commit, and Changes to see where the working tree stands right now.
  • If a diff looks larger than expected, check the project's base branch. A wrong base makes an issue's diff include unrelated work. See Settings.
  • Committed something you did not mean to, and have not pushed? Uncommit on the History tab gives the changes back.