Directions of rebase operations
The relationship between the old baseline and the new baseline for a component defines the direction of the rebase operation. If the new baseline is a descendant of the old baseline, the rebase operation advances. That is, the stream is configured with work done in other streams from the same starting point.
Conversely, if the new baseline is an ancestor of the old baseline, the rebase operation is said to revert. That is, the stream moves back to an earlier baseline. However, if two baselines share an ancestor, but both contain significant development work or if the relationship between the baselines cannot be established, the rebase operation is lateral. A lateral rebase operation is typically used to configure a new version of a read-only component, for example, a compiler.
A single rebase operation might involve many baselines; the rebase direction is determined on each baseline in the rebase operation. Thus, in one rebase operation, a stream might advance for one component, revert for another component, rebase laterally for a third component, and leave a fourth component unchanged.