E.g instead of
v0--(big change a (a1) (a2))-->va--(big change b (b1) (b2))-->vab
we often see
v0--(a1)-->va1--(b1)-->va1b1--(a2)-->va12b1--(b2)-->va12b12
now, some people like to rewrite history, to get the all a before b change. I don't want to rewrte history. But I do want to create a more easily understood version of history.
Why can we not have multiple paths to the same end result? E.g.
v0--(a1)-->va1--(b1)-->va1b1--(a2)-->va12b1--(b2)-->va12b12
\ || ||
o--(a1)-->va1--(a2)-->va12'--(b1)-->va12b1'--(b2)-->va12b12
What are the chances of this formatting working? The diagram probably is messed up.
Anyway, this depicts an alternate history. va1 and va12b12 correspond to exactly the same file contents as the original history. But va12' and va12b1' do not.
We can imagine allowing the user to "check out" va12' and va12b1', but warning that it never occurred in the original history, and may not have been tested as well.
We can also imagine back annoating, ti say that these versions were okay. Tests passed.
For that matter, we could also have
v0--(a1)-->va1--(b1)-->va1b1--(a2)-->va12b1--(b2)-->va12b12
\\ || ||
o--(a1)-->va1--(a2)-->va12'--(b1)-->va12b1'--(b2)-->va12b12
|| ||
o--(b1)-->vb1'--(b2)-->v12'--(a1)-->va1b12''--(a2)-->va12b12
and, overall, between any two points we may have an indication of what chagesets may be grouped, and which are commutative. as well as recording which intermediate points in the possible histories have been tested.