Resolve a delete-modify or rename-rename

The typed conflicts, and their own flags.

Written By Dustin

Last updated 10 minutes ago

Not every conflict is two edits to the same lines. TOVIO types them, so each gets a resolution that actually fits the disagreement instead of a text merge applied to something that is not a text disagreement.

Delete-modify and modify-delete

One side deleted the file; the other changed it.

tovio resolve <path> --keeptovio resolve <path> --delete

--keep keeps the file with the modification. --delete honours the deletion.

These are two types, not one: delete-modify is our side deleting and theirs modifying, modify-delete is the reverse. Both take the same pair of flags, and the type tells you which side you are overruling.

Rename-rename

Both sides renamed the same file to different names.

tovio resolve <path> --rename-to <path>

You pick the name it lands under — including a third name neither side chose. The conflict records both divergent targets, so nothing is inferred.

This is typed rather than guessed because tovio mv records moves instead of reconstructing them from content similarity. The conflict is a fact, not a heuristic that got confused.

Rename-edit

One side renamed the file, the other edited it, and the edits overlap the rename. Resolve it as content: by side, by the interactive walk, or by hand with --working-tree. A rename with a non-overlapping edit never becomes a conflict at all — it merges.

Add-add

Both sides created a file at the same path with different content. Resolve by side, by the walk, or by editing and using --working-tree.

One caution: an add-add conflict has no meaningful common ancestor, so --base here means "neither file" and removes the path. The editor extensions leave --base off the menu for this type for exactly that reason.

Mode and entry-kind

Two disagreements that are not about content at all. A mode conflict means the sides agree on the bytes but disagree on the file mode. An entry-kind conflict means they disagree on what the entry is — a file on one side, a symlink on the other. Both carry each side's value, and both resolve by picking a side:

tovio resolve <path> --ourstovio resolve <path> --theirs

Neither can be resolved from the working tree: there is no byte content to accept, so --working-tree is refused with TVO-CONFLICT-015 rather than silently doing something arbitrary.

Seeing which type you have

tovio conflictstovio status --conflicts