Leroy Sane, Sergio Aguero, and Kevin De Bruyne were on target as Manchester City beat Bristol City 3-2 to ease into the Carabao Cup final.
Marlon Pack’s 64th-minute header and a close-range strike from Aden Flint in stoppage looked like giving Bristol City a draw on the night, but De Bruyne scored with the final kick of the match.
Bristol City, in their first semi-final of a major cup competition for nearly 30 years, had retained hope of causing an upset after losing the first leg at the Etihad Stadium 2-1.
There was an electric atmosphere inside Ashton Gate at kick-off with over 22,000 flags handed out to home supporters.
But this was a bridge too far for Sky Bet Championship hosts who had already eliminated four Premier League sides from the competition, most notably Manchester United in the quarter-final.
Guardiola’s team selection showed he was taking no risks as Kyle Walker, Fernandinho, David Silva and Aguero – none of whom had started the first leg – were all involved from the beginning.
Bristol City’s cause was not helped by the loss of goalkeeper Frank Fielding and Nathan Baker to injury, although the centre-half was fit enough to take his place on the Robins’ bench.
The pattern of the game was a predictable one, Bristol City penned back into their own half by the runaway Premier League leaders and starved of meaningful possession.
Warning signs flashed when Aguero’s chip came back off the crossbar and John Stones narrowly missed out on providing a telling touch to David Silva’s free-kick.
A rare moment of concern for Manchester City saw Fernandinho booked for pulling back Bobby Reid on the edge of the penalty area.
But Bristol City’s opportunity came to nothing and the visitors continued to probe with David Silva at the heart of their best moments.
David Silva’s shot across goal was tipped away by Luke Steele from the lurking Aguero, while the Spaniard was then allowed to advance 40 yards unchallenged before driving wide.
Bristol City’s best hope of levelling the tie appeared to rest on a set-piece, and Flint met Hordur Magnusson’s long throw to force Claudio Bravo into holding onto a looping header under his crossbar.
When Steele pushed out Bernardo Silva’s deflected effort it looked as if Bristol City would reach half-time level on the night.
But Bernardo Silva pressed Magnusson into a mistake on the by-line and the ball fell to Sane, who drove home his 11th goal of the season.
Robins boss Lee Johnson sent on Baker and striker Famara Diedhiou at half-time, but the tie was well and truly beyond Bristol City within four minutes of the restart.
The excellent De Bruyne led the charge out and his delicious pass got the finish it deserved as Aguero drove the ball past Steele.
De Bruyne almost extended the lead but Bristol City refused to throw the towel in and the goal that Ashton Gate craved came after 64 minutes.
Jamie Paterson broke down the left and his cross was met by Pack, whose powerful header gave Bravo no chance.
Home fans were no doubt dreaming of an improbable comeback at that point, even more so when Flint tapped home Reid’s header.
But De Bruyne ensured Manchester City had the last word and they will now met either Arsenal or Chelsea in the final of a competition they won in 2014 and 2016.