I really like this idea to remove this block. Also for me this whole block didn't make much sense to me.

But know we have another problem. We cannot cherry-pick merge-commits. If the cherryPickList contains a merge-commit then our only chance for our rebase command to succed is that we can fast-forward in a way that we don't have to process (cherry-pick) the merge commit anymore.

I would suggest that we simply add one check in the beginning of the initFilesAndRewind() method (before we call the log() command) . Something like:

if (walk.isMergedInto(headCommit, upstreamCommit))
  updateHead()...

For the easy case of a simple fast-forward we can skip all this complicated cases of cherry-picking each and every commit, handling merge commits, ...