Unless I misunderstand something, the author of this (nice) piece does not know about git rebase --onto dst start end, which solves the “deduplication” problem with the direct usage of git rebase without requiring cherry-picking (but cherry-picking is also fine).
git rebase --onto dst start end
I wish there was a tool that would know to do git rebase -i on a range of commit that contains several references (f1, f2, f3 in the example), and update each reference accordingly during the rebase. (Exactly all local refs pointing to one of these commits would be updated by default, with a possibility to exclude some of them.) This would make many of the issues described here go away.
git rebase -i