Commits are thus arcs+nodes, forming a graph.
Each such commit has a unique name, locally and across all distributed copies. [actually a hash whose uniqueness is probabilistically "close enough"]
You can rearrange the graph, so that commits that previously formed independent branches of the graph are combined ("merged"). For commits with diffs on the same file, it either applies both diffs automatically, or detects that it can't do so safely, and demands manual help.
This is very cool.
--
(It seems to me) that the really clever parts of git are (1). the diff algorithm (which is old); and (2). the merge algorithm, including the detection (I don't know if it's old or new; maybe it's as simple as detecting overlap; but you want to prevent automatic merge if there's even a chance it might be wrong - probabilistic again).
What scares me about git is that there is no (simple) undo - and perhaps no undo at all in some cases; and that the commands aren't quite regular (like many unix tools). My experiments with it (doing weird things of course) often lead to messy, messed up graphs that I couldn't get out of.
It shouldn't be that hard. You have a bunch of nodes, you mix and match them one way, you mix them back.
--
I believe there exists (a). a very clean, clear, safe and regular model of these ideas that always works exactly as you'd expect; (b). a ui (commandline or gui) that reflects this model, simply and cleanly. It's just that I don't know what it is.