My understanding is that all existing plans for deflection are wild-and-crazy and completely untested.
We'd be okay if we had 30 years of warning, because that's long enough to try multiple insane strategies, each of which takes half a decade to get working.
They're not all insane. Personally, I'm partial to the slow but effective gravity tow: send a small, 1-ton spacecraft and have it sit right next to the asteroid, without impact. If you place it correctly you can alter the orbit however you like.
Of course, the danger is that this could be used for evil, too. But it's not that crazy, and it would most definitely work.
We routinely land impactors, robots, and even sample return missions on other bodies in the Solar System. It does not seem to be a stretch to land a small rocket on a meteor and give it a push. If you do it a few years in advance, it would not even take much of a rocket.
When the mass you are trying to move is a billion metric tons, you're gonna need a lot of advance warning. We can land on asteroids, changing their trajectory enough to avoid a planet strike is uncharted and entirely unpracticed territory.
Part of me thinks that NASA's recent foray into asteroids is just that, practice.