The Belgian orchestrated a much-improved second half from the Blues, equalising before Bernardo Silva’s injury-time cross was met, six yards from goal, by substitute Sergio Aguero, whose powerful header was only ever going to end up in the back of the Bristol net.
Reid had shot Bristol into a 43rd minute lead, though City could not say they had not been warned before Eliaquim Mangala was caught in possession by Josh Brownhill who sent Reid clean through on goal.
John Stones ended Reid’s run with a clear foul, handing the forward a penalty which he converted clinically past City’s Chilean goalkeeper Claudio Bravo.
It was a goal that had the near 8,000 travelling Bristol fans dreaming of their team downing Pep Guardiola just three weeks after doing exactly the same to Jose Mourinho.
However, the City manager had other plans and, as has been the case so often this season, his half-time team talk had the desired effect, with his side equalising within nine minutes of the restart.
De Bruyne broke from deep in his own half and, after reaching the Bristol area, exchanged passes with Raheem Sterling before driving the ball home from 15 yards.
Even before taking the lead, the Championship side had already given a good account of themselves against a City team that probably consisted of only half of Guardiola’s first-choice starting XI.
Indeed, the City manager came into the semi-final without an orthodox centre- forward in his line-up, using Sterling in that role, but Lee Johnson’s team could still claim to have caused Bravo as many problems in the home goal as their own keeper Frank Fielding had faced.
Joe Bryan’s early run and shot was parried by City’s reserve keeper, though Korey Smith could do nothing with the rebound apart from cross into an area packed with home defenders.
After the half-hour, another impressive Bryan run saw his cross cleared to the edge of the area, where Marlon Pack’s terrific low strike was well saved by the diving Bravo, unsighted in a crowded box.
Just before the interval, another Bryan cross was met by Jamie Paterson, who could not quite make clean contact, under pressure from Stones.
A Bristol side that has already accounted for four Premier League teams — including Manchester’s other Premier League team in the quarter-finals — were undaunted by trying to become the first domestic team to beat City since April, when Arsenal knocked them out in the FA Cup semi-final.
The hosts enjoyed the majority of possession, though not to the lopsided degree usually seen against league opponents, but found Fielding equal to the challenge.
A dangerous early Kevin De Bruyne cross was tipped behind for a corner before Fielding was required to save twice in succession from Leroy Sane’s cross and De Bruyne’s follow-up attempt.
Fielding was finally beaten, in first-half injury-time when Sterling cleverly chipped over him, but teammate Aden Flint was on hand to make a stunning clearing header, over his own bar.
City, however, were a very different proposition after the restart and Sterling was clean through, only to be denied by Fielding’s outstretched arm, just before they equalised.
Afterwards, City pressed for the winner in earnest, with Fielding making a superb, reflex block to keep out Sterling’s close-range effort and Sane then seeing a low shot drifting wide when he might have expected to hit the target.
The Bristol keeper’s ‘reward’ was to see Guardiola throw on club record goalscorer Aguero as a sub, though, curiously, Fielding and his packed defence survived the final 20 minutes largely untroubled until Aguero’s dramatic intervention.
Bravo 7; Danilo 6, Stones 6, Mangala 5, Zinchenko 7 (Walker 79, 6); Toure 5 (Aguero 70, 7); B Silva 6, De Bruyne 8, Gundogan 6, Sane 7; Sterling 7.
Fielding 7; Wright 7, Flint 6, Baker 6, Magnusson 7 (Walsh 72, 6); Brownhill 7, Pack 6, Smith 7, Bryan 8; Paterson 6; Reid 8.
A Taylor 7