Max O'Leary - 6
Was given much to do but dealt with Millwall's aerial deliveries into the box. Did well to tip Bradshaw's header wide of the target.
Zak Vyner - 7
Covered Tanner well when his team-mate was beaten on that side. Beaten once by Tyler Burey but apart from that, he was faultless. Played some progressive passes forward to relieve the pressure on his side.
Kal Naismith - 7
Played a number of superb crosses into the area, one which almost led to the opener when Semenyo appeared to be dragged down. Defensively untroubled and played dangerous passes in behind the defence.
Rob Atkinson - 7
Given a real aerial test playing in the middle of the back three up against Tom Bradshaw. A superb block when he deflected Andreas Voglsammer's effort onto the crossbar. Won his aerial duels.
Cam Pring - 7
A couple of positive passages of play in the first half when he attempted to take on his man. Defensively really solid not giving Danny McNamara a sniff in attacking areas.
Matty James - 8
Showed his experience up against 21-year-old Billy Mitchell by picking his pocket numerous times. Got City moving forward with numerous interceptions. Calm on the ball and defensively resolute. Smart in possession.
Alex Scott - 7
Made some excellent defensive tackles - was certainly up for the scrap. A few moments of class in the middle including a burst forward on the edge of the area before his effort was smothered by the keeper.
George Tanner - 7
Played a superb cross which Semenyo headed wide. Beaten a couple of times too easily in the first half but looked a lot more assured after that. Got forward when he needed to.
Andi Weimann - 7
Full of running and endeavour back in his favoured No10 position but struggled to get on the ball in the first half. Better in the second period, getting in between the midfield and defence and almost assisted Semenyo for the winner. Dragged an effort narrowly wide.
Tommy Conway (off 67, Wells) - 6
Had the opening chance of the game when he dragged his effort wide of the right post. Livelier in the second using his pace to work a couple of really good crossing positions. Worked really hard and was up for the physical battle.
Antoine Semenyo - 7
Missed a header at the back post in the opening 20 minutes. Arguably should have won a penalty when dragged down in the first half. Was up for the challenge but just looked rusty at times with the lack of first-team football. Had City's best chance of the game when he was denied by Long.
Substitutes
Nahki Wells (on 67, Conway) - 7
City looked a lot more dangerous on his introduction with his pace and power causing plenty of problems.
Subs not used: Bentley, Dasilva, Williams, King, Sykes. Bell
SIGN UP: For our daily Robins newsletter, bringing you the latest from Ashton Gate
READ NEXT