Probably rebasing more than anything. cherry-picking is a messier, yet easier way to get the same history, you just need to clean up after yourself.
Merge commits are useful, in my opinion, if there was significant work done to get two branches to "align" with each other. Otherwise, just rebase your work for a cleaner history.
So in short:
Merging: More "accurate" history about the work done to bring the work into the main/dev branch, yet messier.
Rebasing/cherry-picking: cleaner history, potentially at the expense of context and "accurate" history about the work done to bring in code to the main/dev branch.
Merge commits are useful, in my opinion, if there was significant work done to get two branches to "align" with each other. Otherwise, just rebase your work for a cleaner history.
So in short:
Merging: More "accurate" history about the work done to bring the work into the main/dev branch, yet messier.
Rebasing/cherry-picking: cleaner history, potentially at the expense of context and "accurate" history about the work done to bring in code to the main/dev branch.