My now 4yo was/is the same way. She mostly was trying to avoid getting soap in her eyes, since we do not use tearless shampoos. I wash her hair when it is dirty so maybe once a week or every other week (sometimes longer between washings LOL!) We do bath more frequently without washing hair. I don't feel that more frequent washings are necessary and it just wasn't worth the fight.
It is no longer an issue, but we still do not wash hair as frequently as other posters. Some things that have helped:
having her tip her head way back to rinse with a cup and using a wash cloth to keep water/soap out of her eyes and face
If it isn't too dirty, giving her the choice of washing her hair this time or at her next bath, and then reminding her at the beginning of her next bath that we will be washing hair, like she had decided. Some level of control and plenty of warning seem to help here.
Also letting her know that it is important to take care of our bodies and part of that is keeping our hair clean. I gave her the choice of getting it cut short if she didn't want to wash her hair as often. She loves Rapunzel and so agreed that she would let me wash her hair more often without fighting, in order to keep her longer hair. Occasionally we do have to be gently reminded of this choice. If you are not willing to cut hair short, or are unsure of how your child may answer this could backfire. :)
Hair washing has become much easier here. Hang in there. Wash when needed, and try to avoid making it a constant fight. Good Luck!