Skip to main content
Everyday version control

Diff your working copy

tovio diff, against the last commit — and the diffs that are not it.

Written By Dustin

Last updated About 1 month ago

tovio diff

Shows what you have changed since the last commit. Because there is no index, there is only one diff to think about — no distinction between staged and unstaged, and nothing to add first.

diff takes no flags of its own. The globals still apply (--json, --quiet), but there is no --stat, no --cached, and no revision arguments. Comparing two revisions is a different command — see below.

Protected paths

A diff involving content you are entitled to read decrypts for you. Content you are not entitled to read is not disclosed — the diff shows that the path changed without showing what it changed to. This holds everywhere, including in review.

Reviewing a change rather than the working copy

tovio change show <id> --diff
tovio review <change_id>

review renders a change's diff against its base with protected paths redacted according to what the reader is cleared for: a clear path diffs normally, a protected path you can decrypt shows its decrypted diff, and a protected path you cannot shows only a locked marker and a coarse change indicator. It ends with a coverage summary. change show --diff delegates to the same renderer.

Comparing two commits

tovio semantic diff <old> <new>
tovio semantic diff              # HEAD's first parent vs HEAD

Compares the symbol graphs of two commits and flags breaking interface changes rather than textual ones — often the diff you actually wanted. Both arguments are optional and take a blake3:<hex> or bare hex address.

Searching instead of diffing

tovio grep <pattern>
tovio log -S <string>

When the question is “where is this” rather than “what did I change”, grep searches content and log -S searches history.