Yes, this is possible with rebase instead of cherry-pick. The end result should be the same though regardless of which method is used.
First create a new name for the fix branch so that the original fix branch is left unchanged
git branch fixv1.5 fix
Then rebase fixv1.5 onto v1.5
git rebase --onto v1.5 <upstream> fixv1.5
where <upstream>
should be the SHA of the commit that the fix branch was based on, i.e. the one marked P in the diagram below.
Now you should have a history that looks like:
o ... (history)
|
o tag v1.5
| \
| \ A' B' C' D'
| ---o---o---o---o fixv1.5
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|
o (can not have in v1.5) P
|\
| \ (`fix` branch)
| \
| o (needed at v1.5) A
o | -(can not have in v1.5)
| o (needed at v1.5) B
| |
| o (needed at v1.5) C
o | -(can not have in v1.5)
o (needed at v1.5) D
For completeness the equivalent use of cherry-pick would be
git checkout -b fixv1.5 v1.5
git cherry-pick <upstream>..fix