It had looked like it may be a long night for City when Lionel Messi gave the away side a first half lead, but once Ilkay Gundogan tapped in the equaliser just before half-time, they never looked back, Kevin de Bruyne's free-kick putting them ahead shortly after the break, before Gundogan's second goal sealed the win with around 15 minutes remaining.
Sterling unlucky with early penalty shout
Having been thumped in Spain just a few weeks ago, you'd have forgiven City for starting on the defensive, however that wasn't further from the truth as they controlled the first 15 minutes.
They were on top to such an extent that they really should have gone ahead through a penalty, which was controversially not given as Raheem Stering was booked for 'diving', going down under clear contact from Samuel Umtiti after Sergio Aguero had found him with a pass.
Tactical change hands Barca an opening
Realising that things weren't going his side's way, Barcelona boss Luis Enrique instructed Luis Suarez and Lionel Messi to switch positions, a change that paid off with the desired effect as Messi tucked away the opener after 21 minutes.
The Argentine started and finished a fantastic counter-attack, spreading the ball to Neymar who charged down the left flank, eventually cutting inside to see Messi's run from deep relatively unchallenged as City worried about Suarez at the back post. The Brazilian picked the right pass to find his teammate, who finished cooly past Willy Caballero, in the centre of the penalty area.
Guardiola's side looked to get back into the game straightaway, with Ilkay Gundogan stinging Marc-Andre Ter Stegen's hands from long range, whilst Neymar and Ivan Rakitic both went into the book for fouls.
However, the Catalonians' class was beginning to show, with Neymar's heavy touch preventing him from adding a second, whilst Luis Suarez and Andre Gomes both seeing efforts well blocked by John Stones.
Gundogan equalises as City take charge
Just as it looked like Barcelona were really beginning to turn the screw, a surprise mistake at the other end aided City into getting an equaliser. Losing the ball in a dangerous position, the Spanish side were punished as Aguero fed Raheem Sterling, who showed fantastic awareness in teeing up Gundogan at the far post, the German converting without any issue.
It could have been 2-1 before the break as the home crowd whipped City up into an attacking frenzy, Barcelona troubled in a way that's extremely rare to see. Fernandinho broke into the area, playing a one-two with David Silva before his shot rolled just wide of the post.
Manchester City started the second half with the same attacking intent that they'd shown towards the end of the first 45, and Raheem Sterling should have added a goal to his assist when Aguero intercepted Sergi Roberto's pass to set the winger free inside the area. However, Sterling declined to shoot first time, with a heavy touch making the angle too tight for a goal.
de Bruyne's free-kick hands City lead
Fortunately for Sterling, it didn't matter as the Citizens did make good of their pressure by taking the lead just minutes later. David Silva was brought down on the edge of the area, leaving Kevin de Bruyne to step up, angling a punched effort over the wall that left Ter Stegen beaten, the German getting a weak hand to the ball as it ended up in the back of the net.
City were furious in their pressing, leaving Barcelona short of ideas for some time, and it could have been 3-1 soon after if not for better finishing. Sergio Aguero, who seemed to be everywhere, was on the end of a Silva free-kick, albeit nodding wide.
Barcelona managed to wrangle control of possession for a couple of minutes, before City were at it again, Aleksandar Kolarov dispossessing Roberto, giving Silva an option on the counter-attack before the Serbian's cross evaded the toes of de Bruyne by a matter of inches.
Even John Stones was getting involved in the pressing, harrying Arda Turan inside Barcelona's half, winning the ball only for his follow-up pass to be intercepted by Suarez, who squared for Gomes with the centre-midfielder striking the bar.
City didn't let that mistake get to them though, surging forward once more, with Sterling setting up de Bruyne for a potential second, the Belgian leaving Ter Stegen flat-footed as his curling effort ended up on the wrong side of the post.
Gundogan's second secures memorable win
There was a feeling that the third goal would be needed, and it did with Gundogan's second of the night securing three points for Manchester City with around 15 minutes to go.
Breaking again with pace and intent, de Bruyne's inch-perfect pass to substitute Jesus Navas allowed the Spaniard to tee up Aguero for an open goal across the six yard box, however the Argentine's blushes were spared as he got ahead of the ball, deflecting it backwards into the path of Gundogan, who was on hand to finish the move off.
That was pretty much it for City, attacking-wise, bar an Aguero effort that skimmed the side-netting, as Guardiola's men held on comfortably to take three points that leaves them with an excellent chance of qualification for the last 16.