Let's assume your branch situation looks something like this:
A---B feature2
/
o---o---o dev
\
C---D---E feature1
What you want is to rebase your work in feature1 on top of feature2:
A---B feature2
/
o---o---o dev
\
A'---B'---C'---D'---E' feature1
To do that, you can run:
git rebase feature2 feature1
Which basically says "checkout feature1 and rebase it on top of feature2". Of course, be prepared to resolve the conflict that will inevitably appear in the page that both you and the author of feature2 modified.
Background
You may wonder why rebase? Well, because it produces a clear history regardless of which branch gets merged first into dev.
For example, let's consider the scenario where feature2 is merged before feature1:
A---B feature2
/ \
o---o---o---o dev
\
A'---B'---C'---D'---E' feature1
In that case, once you rebase feature1 on top of dev, Git will detect that the changes introduced by commits A and B are already in dev, so it will remove them from feature1:
A---B feature2
/ \
o---o---o---o dev
\
C'---D'---E' feature1
What about if feature1 is rebased before feature2:
A---B feature2
/
o---o---o-----------------------o dev
\ /
A'---B'---C'---D'---E' feature1
The same thing applies here. Once you rebase feature2 on top of dev, A and B are going to be removed from feature1 because their changes are already present in dev:
o---o---o---------------------o dev, feature2
\ /
A'---B'---C---D---E feature1
Of course, if new commits were added in feature2 after you rebased your feature1 on top of it, those commits will still be kept:
F---G---H feature2
/
o---o---o---------------------o dev
\ /
A'---B'---C---D---E feature1