Being a Gnar main, I think I could give you some pointers.
Gnar is a champ who has to commit heavily in order to kill his target, using his entire ability rotation in order to stay on them, and just keep bashing them over and over again. Avoiding even a little of his CC and poke can go a VERY long way against him.
In mini form, he has no wave clear whatsoever, so use that to your advantage. Push him into his tower, and keep him there. You'll force him to go into mega form at a time that doesn't really want to just to keep his tower alive.
Once in mega form, just stay away from him, and avoid the boulders as best you can. He loses pretty much all of his mobility, and has to rely on his CC in order to keep up with his target.
Coming out of mega form is actually when he is the most vulnerable. More then likely his E (the bounce) will still be on cooldown, or just about to come off cooldown (depends on which skills he maxes). You want to take every opportunity against him in this window, for he doesn't have much in order to fight back.
If you ever trade with him, but find out your losing, get out as soon as possible. Like I said, he excels at sticking to his target, and if you can't get out of his range, you will surely die.
Now, obviously, this is all far easier said than done. From what I have seen, every Gnar player has certain patterns to how they play him. They are all relatively the same, but also slightly different at the same time. You just have to learn how they play him, and act accordingly.
As for champs who counter him, it would be those that can avoid his CC, and actually out duel him. Riven, Vayne, and Teemo are all great choices against him, while people like Fiora, Sion, and Wukong all struggle against him.
Hopefully, this gives you an idea on how to fight against him.