Overgit
The repository's history, graph, branches, tags, remotes, stashes and worktrees in the sidebar.
Overgit is the git panel in the sidebar: the checkout’s commits with a lane-based graph, its branches with how far ahead and behind they are, its pull requests, worktrees, stashes, tags and remotes — and a commit’s own diff in the right-hand pane.
⌥⌘G opens the sidebar on it. The palette’s Overgit does the same, and the View menu’s item is ticked while the sidebar is on it. The sidebar’s other panels are Files, Sessions and Snippets; ⌘B toggles the sidebar itself.
Outside a git repository the panel says “Not in a git repository”.
Sections
Each section opens and closes on its own, and that is not decoration: a section that is shut is not read. Overgit reads only while it is the panel on screen and only the sections that are open, so a sidebar left on it costs nothing when you are not looking. Shutting a section keeps what it read, so reopening does not blink.
| Section | Read from |
|---|---|
| Commits | git log with full decoration, including each commit’s parents |
| Branches | git for-each-ref — local and remote, with ahead/behind and “upstream gone” |
| Pull Requests | the pull requests WorktreeModel already asked your gh for |
| Worktrees | git worktree list, with the merge marks and pull requests from the same source |
| Stashes | git stash list |
| Tags | git for-each-ref, with each tag’s subject and short SHA |
| Remotes | git remote -v, showing each remote’s host |
Pull requests are not asked for twice: Overterm already asks gh once a
minute for the whole repository, and a second asker would double the rate
limit for the same answer. The uncommitted counts shown in the overview are
the changes pane’s, for the same reason.
Full decoration (--decorate=full) is not cosmetic. Short names cannot be
told apart — feature/x is a local branch and origin/x is not — and the
full refname says which without guessing.
The graph
Beside the commit rows, a lane graph drawn per row. A lane is a column some commit is expected in: a commit takes the lowest lane already waiting for it, else the lowest free one; its first parent inherits that lane and its other parents take their own; a lane nobody is waiting in is free again at once. Six lanes therefore serve a repository with a hundred branches, as long as only six overlap.
Past that budget, lanes are drawn on top of the last one rather than widening the sidebar without end — a sidebar can be 180 pt wide, and an exact graph there is worth less than a subject you can read. Commit rows are a fixed 36 pt so the lines meet.
Branch names are shown as a tree of folders, so feat/a and feat/b fold
together.
Row actions
| Row | Menu |
|---|---|
| a commit | Show This Commit, Copy SHA, Copy Subject |
| a branch | Check Out, New Worktree Here…, Copy Name |
| a pull request | opens the right-hand pane on it when it is the current branch, else Open on GitHub |
| a worktree | see Worktrees and tasks |
| a stash | Apply, Drop… |
A commit’s diff
Show This Commit opens the commit in the right-hand pane — a fourth view beside Changes, Pull Request and Usage, not a column of its own, so the “right of the window is one slot” rule holds and the browser steps aside as it does for the changes pane.
The pane runs git show for the commit and once per file, and draws the
files with the same cards and the same intra-line diff marks the
changes pane uses, without the stage box or Discard. A merge
commit is shown against its first parent — what it brought in — and the pane
says so.
Two settings
| Key | Default | What it does |
|---|---|---|
general.overgitCommits |
300 |
How many commits the history and its graph read. More is a longer read on a repository with a long history. 50–2000. |
general.overgitAllRefs |
false |
Graph every branch and tag rather than just the current branch, so branches that have not been merged appear. |
Both are in Settings ▸ General ▸ Overgit. See Settings.
Where Worktrees went
Worktrees used to be a sidebar panel with an icon of its own; it is now a section of Overgit. A sidebar left on the old panel comes back on Overgit rather than empty.