I know Rebase is a (bundled) extension, while Graft is a core feature (that replaced the Transplant (bundled) extension).
graft
is document
hg graft
allows "cherry-picking," as you noted in your question. For example, you can run hg graft -D "2085::2093 and not 2091"
to copy only some changes from another revision. By comparison, hg rebase
(with or without --keep
) will grab whatever changeset you specify and all of its decendant changes.
Also, rebase
allows you to collapse changesets (with --collapse
). As far as I can tell, graft
does not.
One more difference I have noticed: hg graft --edit 123
lets you graft revision 123 to the working directory and edit the commit message. I can't find an hg rebase
equivalent. I should point out, though, that hg histedit
also allows for editing the commit message while rebasing.
There are probably other differences that I am not thinking of. SO community: feel free to point those out in the comments, and I will happily revise this answer to make it more complete.
See the graft documentation and the Rebase Extension documentation for more details.