It's mainly me on the receiving end when she's cross, but she also does it to friends if she doesn't want to share a toy.
Sometimes she'll tell me that she's hit someone after the event and it's difficult to find out whether it's true or not. Recently she mentioned a boy's name and said she hit him. I've never heard of this boy before and asked if she met him at pre-school or when she was at her dad's. She said when she was with her dad and I questioned her more about what her dad did. It all sounded perfectly feasible until today when I realised that this boy goes to her pre-school and is nothing to do with her dad at all 
I've told her in every way I can think of why she shouldn't and I genuinely believe she understands that it's wrong, but how do I actually stop it? I hate that she does it for so many reasons.