Earlier quoted context omitted.
It's no different from how rebasing works in any shared git project; rebased commits are re-created with different SHAs.
Right but that doesn't address the collaboration issue: who gets to decide where the branch points to?
If I'm on a project with change AAA -> BBB, suppose my friend authors CCC and I author DDD.
So my history looks like:
AAA ----> BBB ----> DDD
(immutable) (immutable) (mutable)
And my friend's has: AAA ----> BBB ----> CCC
(immutable) (immutable) (mutable)
But then my friend pushes their change first. So when I pull, I'll have: AAA -> BBB -> CCC (immutable)
\
'-> DDD (mutable)
Just like git, I then rebase my commit by saying `jj next` (mnemonic: "move this commit to its next descendant") to get AAA -> BBB -> CCC (immutable) -> DDD (mutable)