that was the other possibility but i'm not aware of one that gives you the ability to push diffs on an existing state. locking really is going to be needed, i think, unless someone invents a radically new CRDT that can do diffs.
What do you mean by "diffs"? Isn't op based crdt ("CmRDTs") just that?
when they are on one branch they come into conflict. it's easy to exclude this possibility by making branches tied to a key, but merge conflicts require human intervention.
it's not the same as forks in a blockchain where you can just pick the smaller hash. there is usually tens if not thousands of changes in a commit, and it would be highly impractical to have code rearrange itself as you work on it.
it's good that i bumped into this subject because the project i am helping bring to fruition needed some protection from concurrency and they devised some good solutions.