cherry-pick can be implemented using merge.  :-)

Lets say we want to cherry-pick commit C, whose parent is B, and we want to apply it on top of Q:

  o----- B ----- C
   \
    o--o--o-- Q

* Set the "ours" side to be Q.
* Set the "theirs" side to be C.
* Fix the merge base to be C^1, that is B.

Where there is a B-C difference, it shows up as an edit made by "them" and is applied by the merge as a "theirs" side edit.  Where there is a B-Q difference, it shows up as an edit made by "us" and shows up as an "ours" side edit.  Providing that these edits aren't conflicting, the merge will complete cleanly.