
Reading the lanes
Each vertical line is one lane, and every live branch gets one.- The leftmost lane is the trunk, following the first parent down. It runs straight from top to bottom.
- The lanes to the right are side branches that split off. Once merged, they converge back toward the trunk.
- A connector’s color follows the lane color of the vertical segment it passes through.
Pushed vs unpushed nodes
A node’s fill shows whether it is on a remote. A filled circle is a commit that exists on some remote; a hollow ring is a commit that exists only locally. If the currently checked-out commit (HEAD) is unpushed, only that node shows a rippling wave animation.Pushed status is based on remote state as of the last
git fetch.Ref chips
The refs pointing at a commit are grouped by branch name, and each group draws one chip in that commit’s lane color (tags use a fixed neutral color instead). A chip writes the branch name once and puts an icon in front of it for every place that branch lives:- Laptop icon means the branch exists locally. The checked-out branch is bold and carries a checkmark.
- One icon per remote appears, with
originfirst and the rest in name order. Hover an icon to see which remote it stands for. - Tags are never merged into a branch chip; each keeps its own chip with a tag icon and the tag name.
feature chip with three icons, and a branch that exists only on a remote is a feature chip with just that remote’s icon. The missing laptop icon is what tells you there’s no local copy.
Remote branches are never written as origin/feature in the graph.
A remote’s icon comes from that remote’s own URL. A repository whose
origin is on GitHub and whose upstream is on GitLab shows a different mark for each; an unrecognized host falls back to a globe.
Two remotes on the same host therefore look alike. Give one of them a custom icon to tell them apart at a glance.No chip is ever dropped from a row.
When a row runs out of width, the names shrink with an ellipsis: chips with no local branch give way first, and the branch you have locally is the last thing to shrink.
Shallow repositories

.git/shallow file), the boundary commit where Git stops walking earlier history carries a shallow badge on its row.
If the boundary commit’s parent object exists locally and also appears in the graph, a dashed edge connects the two.
When the parent object is missing, as in a typical --depth=1 clone, the commit gets only the badge and is drawn as a root.
The dashed edge is for display only. Git operations such as squash and rebase work on the history as Git sees it, cut off at the boundary.
git fetch --unshallow.
The graph redraws when it finishes.
Scope toggle (all branches / current branch)
- Main worktree always draws all branches.
- Linked worktree defaults to Show current branch only, switched with the toggle button in the header.

Graph search and filters
1
Open search
A search bar opens in the upper right of the graph.
The key that opens it is listed in Shortcuts.
2
Enter a search term
Free text matches case-insensitively against the start of the commit SHA and the commit summary.
A
current / total count is displayed.3
Combine filters
Typing a
key:value filter alongside free text turns it into a pill, and you can combine several.Wrap values containing spaces in double quotes.
4
Move between results
Moving between results with the search bar’s Previous match and Next match buttons scrolls to and selects that commit so it stays visible.
When there are results, only matching commits stay sharp and the rest fade.

Search covers the commits loaded in the current scope.
Free text and
message: search the summary only.Minimap
A minimap floating in the lower right of the graph lets you move quickly through a long history.- It draws only the lane, node, and edge topology at a reduced scale, and marks the currently visible range with a viewport box.
- Clicking anywhere centers the view on that point, and dragging scrubs continuously. Wheel scrolling also works.
- The relative date chips on the right (“Today”, “3 weeks ago”) give you a rough sense of time position.
- It hides automatically when the history is short enough that no scrolling is needed.

Date sections
Commits sharing the same relative date label are grouped into one section, with the label shown to the right of the section’s first row. The labels grow coarser the older the commit: Today / Yesterday / N days ago (up to 6 days) → N weeks ago (up to 29 days) → N months ago (up to 364 days) → N years ago. Hover over a label to see the exact date in a tooltip.Commits are ordered by topological sort, so the order is not always strictly chronological.
If the same label reappears at a separate position, its section header is shown again.
Selecting a commit and its details
Click a commit and its details (author, time, message, and changed files) open on the right. Selecting several makes them the target for squashing and multi-commit cherry-pick.
HEAD ancestry highlighting
The graph draws commits reachable from the current HEAD sharply, and dims everything else. The reference point is always HEAD. Selecting a different commit does not change it.When there is at least one search result, this highlighting is replaced by search-result highlighting.

