I don't see why this whole section is even necessary.

To get the same results (verified it just now), remove the section and change the following check:

                // nothing to do: return with UP_TO_DATE_RESULT
-               if (cherryPickList.isEmpty())
+               if (cherryPickList.isEmpty() && headId.equals(upstreamCommit.getId()))
                        return RebaseResult.UP_TO_DATE_RESULT;

And in call(), change the last return statement:

                        }
-                       return new RebaseResult(Status.UP_TO_DATE);
+                       return new RebaseResult(Status.FAST_FORWARD);