Skip to content

Seeing lanes diverge: the lane timeline

You've met lanes and how branching works. But when several are in flight at once, one question is hard to answer from a wall of text:

"Where did these lanes actually diverge — and where did they come back together?"

tovio explain lanes draws it. Every lane becomes a row, time runs left → right, and the connectors show where each lane branched off and where a land merged it back.

What it looks like

Here is a repository with four lanes — main and three feature lanes. One (feature-a) has already been landed back onto main; two are still diverged.

← oldernewer → mainfeature-cfeature-bfeature-afeature-cfeature-bfeature-amainfork (recorded)fork (inferred)mergemerge commit
A repository with four lanes. This is the diagram tovio explain lanes --format html renders, embedded here with this site's colour tokens.

How to read it

  • Each row is a lane. main is on top; the others are your work-in-flight.
  • A dot is a commit, placed by how deep it is in history — so older is left, newer is right.
  • A dashed line is a recorded fork — where a lane branched off, read from the signed record TOVIO wrote when the lane was created. feature-c was cut from main, and TOVIO knows it.
  • A dotted line is an inferred fork — where a lane's history meets another's, worked out from the commit graph because no record exists. That is the only answer Git can give, and TOVIO labels it as one. feature-a and feature-b are inferred here.
  • A solid line is a merge — where a land brought a lane back. Here feature-a rejoins main.
  • A ring ⌾ is a merge commit (it has two parents, one from each lane); a glowing dot is a lane's current tip.

The whole picture answers "where did these diverge?" at a glance — the thing a flat list of commits, or even the terminal's tovio log --graph, can only hint at.

Recorded or inferred?

A fork is recorded when the lane was created with tovio lane (or the Git-compatible checkout -b) in a repository that has an identity. The signed audit entry for that creation carries the commit the lane was cut from and the name of the lane it was cut from. A fork is inferred in every other case: a lane created before origins were recorded, in a Simple repository, or on another machine.

That last case matters: audit entries do not sync, so a teammate's clone sees the forks of lanes you created as inferred. The record lives on the machine that made it.

tovio --json lane shows a recorded origin directly, including whether it still resolves. If the lane it names has been deleted, or its name reused for a lane that no longer contains the fork commit, the origin keeps its commit and reports that the name no longer resolves.

Try it on your own repository

tovio explain lanes

That prints the same trace in your terminal — each lane, how far ahead / behind main it is, where it was cut from when that is recorded, and its fork point inferred from the graph. To get the visual above as a standalone, offline page you can open in a browser or share:

tovio explain lanes --format html > lanes.html

Focus on specific lanes, or widen the time window:

tovio explain lanes feature-a feature-b   # just these two
tovio explain lanes --limit 80            # show more history

And for tooling, the same trace as structured data:

tovio explain lanes --format json

explain is a whole family

lanes is one lens of tovio explain. The others debug a single operation the same way — tovio explain merge (how a land would resolve), explain sync (why a lane pointer moved), explain deps, explain rerere, and more. Every one renders to your terminal, --json, or a self-contained HTML page.

Why this is safe to stare at

TOVIO is built so that divergence is data, not danger — a sync you run reconciles a diverged unprotected lane on the lane into a merge-or-conflict commit (both tips become parents, nothing stranded), changes keep their identity through every rewrite, and conflicts are stored, not lost. So a busy timeline with lots of forks isn't a warning sign; it's just parallel work, and the merges show it coming back together. That's the fearlessness idea, made visible.


Related: Change vs lane · Branching workflows · Coming from Git

Last reviewed September 19, 2026

Suggest an improvement to this page Not for security reports — see disclosure