Skip to main content
Lanes, changes & history

Land only part of a change

tovio change split, for when half your work is ready.

Written By Dustin

Last updated About 1 month ago

tovio change split --paths 'src/parser/**'
tovio change split chg:a3f7b2 --paths 'docs/**' --paths 'README.md'

Carves the files matching --paths into a fresh ready sub-change that can land on its own, and leaves the rest as the remainder. --paths is repeatable and at least one is required. Omit the id to split your current change.

The result is a three-link chain: parent โ†’ ready โ†’ remainder. The remainder keeps the original change's id โ€” so its review history stays attached โ€” and stacks on top of the new sub-change, which gets a fresh chg: id of its own.

When you want this

  • A change grew and only part of it is reviewed.
  • A bug fix got tangled with a refactor and the fix should ship now.
  • A reviewer approved some files and questioned others.

Partial landing is always split-then-land. There is no per-file cherry-pick.

What it refuses

  • TVO-OP-013 โ€” the named change is not a lane tip. It has committed descendants and splitting it would orphan them, so split the tip instead.
  • TVO-OP-014 โ€” the target is a merge commit; splitting one would drop its second-parent lineage.
  • TVO-OP-015 โ€” the partition is degenerate: the globs matched none of the change's files, or all of them. A split must produce two non-empty parts. tovio diff shows what it touched.

Check before landing

tovio change health <new-id>
tovio land --dry-run

Splitting by path can produce a piece that is coherent to the merge algebra but does not compile on its own. change health tells you it is landable; only your own build tells you it is correct.

Undo

tovio undo