A way to do it manually (without cherry picking)
make a new branch from the head of your branch where the commits are located git branch newB
hard reset this new branch to the last commit git reset --hard <shaID of Commit19>
method 1
do a mixed reset to the commit directly before the first commit git reset --mixed <shaId of the mentioned commit>
do a stash on this 'modified' code to just have the commits 1 to 19 git stash
goto where you want to apply this manual cherry pick and do a pop git checkout <dstBranch>
&& git stash pop
method 2 (this method will keep the commit msgs)
do a hard reset to the commit right before the first commit git reset --hard <shaId of the mentioned commit>
do a squashed merge with the reflogs previous state git merge --squash HEAD@{1}
now you will see that commits 1 - 19 will be indexed and if you do a commit, the commit msg will be prepopulated with all of the individual commits msgs... allowing you to modify the msg as wanted
Now that you have your commit, cherry pick this one commit to where you want it. It has the benefit of having all of the wanted commit msgs.
when done
delete the temp branch to get rid of all of the junk that you've done to do your internal pick git branch -D newB