The Swans raced into a 2-0 half-time lead and maintained that lead until the 69th-minute when the Blues, inspired by sub Sergio Aguero, began to turn the tide.
Goals from Bernardo, an own goal from Kristoffer Nordfeldt and a late, late winner from Aguero kept City’s FA Cup dream alive after a pulsating encounter at the Liberty Stadium.
READ: When is the FA Cup semi-final draw?
WATCH: Bernardo reacts to City comeback
What happened?
At a sodden Liberty Stadium, City began their quest for yet another Wembley appearance and the hosts were quickly under pressure as the Blues began to exploit the space Swansea were allowing.
No stifling tactics here or parked buses – it’s not been Swansea’s style for many years, and it was refreshing to see it wasn’t the case for this encounter.
Of course, giving the defending Premier League champions time and space is a risky tactic at the best of times and on six minutes, City almost struck.
Leroy Sane dropped a shoulder in the box and fired in a low shot that keeper parried out and Riyad Mahrez’s follow-up header bounced a foot past the post.
And the Championship side, repeatedly caught on the counter-attack, almost conceded on 14 minutes when Sane’s deep cross found the foot of Bernardo whose volley was pushed out by Nordfeldt.
The hosts were neat and tidy in possession and had one or two moves that just fell short until, against the run of play, the Swans went ahead.
Connor Roberts cut in from the right as he collected a lofted pass and Fabian Delph’s attempt to stop him was correctly deemed a foul and Matt Grimes scored from the spot.
Ten minutes later, it got worse as the Blues paid for some wasteful passing in the Swansea box by falling further behind.
City were slow in tracking back as the home side countered and as the ball fell to former EDS midfielder Bersant Celina he curled a shot over Ederson to double Swansea’s lead.
There was plenty of time left for the Blues to put things right, but to say being behind to a mid-table Championship side with half-an-hour or so gone was unscripted was an understatement.
David Silva then saw a close-range shot somehow kept out on the line by Roberts and Bernardo saw a shot paddled away by Nordfeldt as it looked more and more as though it be ‘one of those days.’
As the half-time whistle went, it looked like City’s dream of a domestic silverware sweep was set to end in South Wales.
It was going to take a huge effort from the Blues to salvage this tie.
If Swansea had been more free-spirited in the first half, they were now defending in numbers as they made an early bid to hang on to what they had, but the Blues were making too many poor choices in and around the box.
Pep Guardiola made three changes around the hour-mark and on 69, one of the new arrivals – Kun Aguero – saw a shot blocked before laying the ball to Bernardo who hit a sweet shot past the keeper to halve the deficit.
Finally, the travelling fans had something to cheer – but could the Blues now find an equaliser?
The answer was yes.
Raheem Sterling collected the ball on the right, took on Cameron Carter-Vickers and the Swansea man caught Sterling’s leg and the referee pointed to the spot.
Aguero took the penalty but slipped as he took it – the ball hit the post and then struck the heel of Nordfeldt and ended in the back of the net to make it 2-2.
The Blues then laid siege on the Swans’ goal and it was nothing short of a miracle that the hosts remained on level terms for as long as they did – but with two minutes to go, the hosts’ luck ran out.
Bernardo, brilliant since drifting over to the right flank, headed towards the box, bent a superb cross into the box and Aguero’s diving header.
It was a breath-taking comeback by a team who never know when they are beaten and was the last meaningful act of an absorbing FA Cup tie.
Star man: Sergio Aguero
He had 26 minutes to save the day and, ably assisted by his team-mates, he did exactly that.
One assist, a penalty that led to (technically) an own goal and a superb diving header to win it – all in a day’s work for our Argentine superstar.
Brilliant Bernardo
He’s just agreed to remain a City player until 2025 and he is going to get better and better.
His second-half cameo was near perfection and he scored a fantastic goal to drag the Blues back into the game and then set up Aguero’s winner with a brilliant cross.
What a talent.
Pep reaction:
“It’s a cup competition and there’s always surprises, and we knew it.
“We knew of their quality. Fast players, big quality.
“We played a good game in general. We made some mistakes and conceded goals. We adjusted something in the way we defended after half-time.
“Celina moved well between the lines and we defended better with two holding players, but we spoke at half time and said we need a goal and then hopefully the rest will be easier. The spirit didn’t drop.
“We started really well at the beginning, but missed the last pass and last actions, that’s why we had problems.
“Swansea played well. But we started second half very good, found a goal and after we created a lot of chances.
“Now we are going to fight every game after the international break.”
What it means…
City have booked another Wembley date and we will learn our FA Cup semi-final opponents on Sunday afternoon.
What’s next?
City are not in action again until 30 March away to Fulham.
The international break will allow one or two injuries time to clear up for the last big push through April and May.