An early headed goal by Famara Diedhiou condemned Reading to defeat at Ashton Gate.
There were chances for both sides throughout the match – in particular during the second half for the Royals – but one goal was enough to ensure that the points would stay in Bristol when the referee sounded the final whistle.
Pelé and Matt Miazga each returned to the starting XI, replacing Josh Barrett and the suspended John Swift, while Danny Loader was back on the bench after recent illness.
Just 40 seconds into the game, however, Miazga was receiving treatment. The centre-half lost his footing as he went to challenge Diedhiou in the air, and was inadvertently trodden on as he lay flat. After getting some medical attention, he played on with a mouthful of cotton wool.
Yakou Méïté, scorer in the Royals’ last outing, was first to go close. Pelé’s low corner bamboozled the Robins’ back line – the Ivorian’s effort was powerful, but blocked firmly.
Ovie Ejaria was twice called upon to put in blocks in quick succession to keep the hosts’ attack at bay, and then Andreas Weimann headed over when Callum O’Dowda’s cross found him arriving in the area.
But the Royals’ resistance was broken when Diedhiou got the goalscoring underway in the 12th minute. Niclas Eliasson was the architect, cutting infield from the right flank and picking out the Senegalese striker on the run with an inswinging delivery. The Robins’ centre-forward guided his header beyond Rafael’s stretch for the opening goal.
In reply, Ejaria worked room for a shot outside the area; a deflection took it behind. From the resulting corner, Méïté and Liam Moore each saw their efforts blocked, and then Ejaria had two bites of the cherry – the first also blocked, and the second lashed narrowly wide of the far post.
Then Ejaria spotted the run in behind of Méïté, and picked out the forward with a pinpoint ball from deep. A terrific first touch sent Méïté through on goal, but goalkeeper Daniel Bentley was out quickly and saved with his legs in the six-yard box.
Reading had to withstand some pressure as the hosts were controlling the ball well; the defence were covering angles well though and reducing City to efforts from distance.
And the Royals might have snatched a leveller before the break as Méïté used his strength to bully Ashley Williams off the ball and set George Pușcaș away – the Romanian forward escaped the attentions of Robins skipper Josh Brownhill, but Pedro Pereira recovered just in time.
Two more chances came the way of Reading before the break; the first was a wayward Ejaria strike, and the second as Méïté’s penalty claims fell on deaf ears when he was bundled over by Pereira as Andy Yiadom sent in a deep delivery.
Half-time: Bristol City 1-0 Reading
Skipper Moore was deployed in a more advanced role when the teams came out - Michael Morrison and Miazga were on centre-half duty, while the captain anchored the base of midfield alongside Pelé.
City might have doubled the advantage less than a minute into the second period; goalie Rafael did well to shovel around his near post when O'Dowda was slipped in down the left by Diedhiou.
Then Pușcaș earned himself an opportunity when he rolled Taylor Moore on the Robins' left, but his ferocious strike from a tight angle cleared the bar.
And when the ball fell to Pușcaș six yards out, it slipped agonisingly off his toe and behind for a goal-kick. Omar Richards' early release had set Ejaria into the clear in the left channel, and he in turn put in a sharp delivery with the outside of his right boot. A golden opportunity for the leveller.
Lucas Boyé looked lively as soon as he entered the fray and started causing havoc on the inside right, and Ejaria's delightful skill on the left byline left bodies in his wake but no-one was able to apply a finish as he centred.
Reading were much-improved after the break and looking the likelier to grab the game's second goal. But the Robins still posed a threat and Diedhiou's bold forward play allowed him to tee up Han-Noah Massengo, who shanked wide from the edge of the area.
The game was becoming increasingly stretched as the teams tried to catch each other out of position; Yiadom stole in on a loose ball and released Méïté on the right, before firing a powerful effort past the far post.
Josh Barrett and Lucas João were introduced in place of Pelé and Morrison, as bodies went forward to try and grab a game-changing goal. It nearly came when Moore launched in a long throw which defensive partner Miazga met first - defender Williams poked narrowly past his own near post.
Méïté thundered a header marginally over as he met Barrett's deep delivery, and Boyé rolled his marker and cracked a stunning low drive which Bentley kept out smartly. The equaliser just wouldn't come.
The Royals worked until the final of the four added minutes to try and salvage a point, but the Robins held firm to condemn Reading to defeat.
Full-time: Bristol City 1-0 Reading
Bristol City: Bentley, Pereira, Rowe, Williams, Moore, Brownhill (c), O’Dowda (Palmer 85), Eliasson (Hunt 72), Massengo, Weimann, Diedhiou (Semenyo 72).
Unused subs: Maenpaa, Wright, Watkins, Szmodics.
Goal: Diedhiou (12).
Reading: Rafael, Yiadom, Richards, Moore (c), Morrison (João 81), Miazga, Rinomhota, Pelé (Barrett 74), Ejaria, Méïté, Pușcaș (Boyé 62).
Unused subs: Walker, Loader, McIntyre, Olise.
Yellow: Moore, Rinomhota.
Referee: Mr S Martin