Saphan StudioDocs
Reference/Commands

saphan absorb

Merges the branch a stream will land on into the stream's own branch, so the stream catches up with its base before it is merged.

Merges the branch a stream will land on into the stream's own branch, so the stream catches up with its base before it is merged. Both branches must exist locally in the stream's repository; a remote-tracking branch is never used, and on success the stream's branch moves to the new merge commit. It is the reverse direction of saphan merge, and the step a merge refused for conflicts points you to. It resolves nothing for you: alongside any conflicts it lists the changed paths git did not flag but that you should read, and it refuses to hand-resolve a generated file, naming the generator that rebuilds it instead. When every conflicting path is a generated file whose header names a go generate command, it regenerates them itself and lands the result only if two generator passes agree, no conflict marker remains and the merged tree builds; otherwise it lands nothing.

The absorption is not reported as settled until the checks have been run against the merged commit and the stream's return names the new tip; run the same command again afterwards to take that reading. Rehearse it with saphan dry-run absorb, which computes the same conflicts and findings and moves nothing.

saphan absorb payments-refactor
saphan dry-run absorb payments-refactor
saphan absorb <stream>
flagtypedefaultwhat it does
--resolutionsstringLand a conflict resolution prepared as a directory holding one file per conflicted path, laid out by repository path: the engine merges the pair itself, takes those files from the directory and moves the stream's branch forward, without merging anything in a worktree.
--resolvedboolfalseLand the conflict resolution left staged in the stream's worktree (the base merged in, every conflict resolved) as a merge commit the engine writes.

Global options apply to every command — see Every command.