I second that; rebasing and cherry picking is the way to go.
It's a pity that git still hasn't learned Origin headers when cherry picking, though. But this way of recording the patch relations is simply too clumsy imo.
At least this method didn't give false merge relations between the main branches. That is something I'd consider bad enough to actually warrant backing up branch heads on the server, since it'd bring in all commits from another branch when listing the history of one branch. It'd be nice if githelper could be extended to block such merges, i.e. if a commit moves the merge base between any two main (X.Y-style) branches, it's blocked.