He came back from nursery tonight over-tired and hyper. My DM helped me to bath DS - she's giving me a hand because I'm 36+5 weeks pregnant and tired because DH is away. DS didn't want to get into his pyjamas, so he hit DM. I was very annoyed, so took him aside, knelt down, held his hands and told him, "No. We don't hit anyone. Say sorry to Granny". He wouldn't, looked me straight in the eye, said "No!" and then head butted me, causing me to cry and a slight nosebleed 
I'm really upset and teary. Hormones, I know, but I'm also shocked. My nose hurts. He does occasionally hit, like, I suppose, most toddlers when they're v frustrated, but never a head butt!