Darius Henderson earned Championship strugglers Millwall a point for the second game running.
The striker, who grabbed a late equaliser in Saturday's 2-2 draw at Burnley, levelled after Steve Davies had given Bristol City the lead.
Davies, signed from Derby in August, marked his first City start with a 30-yard header that beat David Forde.
But despite Henderson's headed goal, Millwall are without a win in five matches and stay in the bottom three.
Henderson had passed up a good early chance to score, failing to beat keeper Tom Heaton when well placed after being played through by Liam Trotter.
Davies, who had already tried his luck with three long-range efforts, headed Bristol City in front when Forde headed Cole Skuse's through-ball into his path under pressure from Sam Baldock.
The equaliser came when Henderson headed home James Henry's cross from the right seven minutes before half-time.
Chris Wood almost gave Millwall the lead before the break, but he could not get enough power on his header from Shane Lowry's cross as Heaton easily claimed.
Henderson's seventh heaven
Darius Henderson's goal was the seventh he has scored against Bristol City, and Millwall's 300th in the league under manager Kenny Jackett
Derek McInnes's men had the first chance of the second half when Davies nodded down a Neil Kilkenny cross into the path of Albert Adomah but, off balance, he struck over the bar from close range.
Davies then curled a free-kick wide, before hitting the side-netting with a shot from Skuse's delivery.
Substitute Andy Keogh glanced a header wide for Millwall with three minutes to go, while Henderson dragged a shot wide in injury time as the visitors ended the game on top.
Bristol City manager Derek McInnes: "Millwall battled hard for their point, but we missed two great chances in the second half when Albert Adomah and Steve Davies missed the target.
"Had either one of those gone in I think it would have been a different story. But we have to be more resilient when defending crosses."
Millwall assistant manager Joe Gallen: "The lads are disappointed. David Forde was unlucky with their goal because he took the right decision to come out.
"It was amazing that the ball should drop to their lad with such pace that he was able to generate the power to head it in.
"But after that we showed a lot of character, scored a great goal ourselves and defended with a lot of tenacity."
Sorry, we were unable to load match stats, please try again.
Live Text Commentary
Full Time The referee signals the end of the game.90:00 +3:02
Corner taken by James Henry.90:00 +2:25
Effort from the edge of the area by Andy Keogh goes wide of the right-hand upright. Corner taken right-footed by James Henry from the right by-line to the near post, Martyn Woolford makes a clearance.90:00 +1:40
Darius Henderson produces a right-footed shot from deep inside the penalty box which goes wide of the right-hand upright.90:00 +0:08
James Henry takes a outswinging corner from the right by-line to the near post, clearance by Martyn Woolford.85:45
James Henry crosses the ball.83:02 Substitution
Substitution Sam Baldock leaves the field to be replaced by Brett Pitman.83:02 Substitution
Substitution Chris Taylor joins the action as a substitute, replacing Scott Malone.83:02
Martyn Woolford takes the direct free kick.83:02 Booking
Booking Shane Lowry goes into the book for unsporting behaviour.82:52
Shane Lowry challenges Sam Baldock unfairly and gives away a free kick.81:32
Unfair challenge on Ryan Taylor by Shane Lowry results in a free kick. Cole Skuse takes the free kick.79:56
Albert Adomah takes the inswinging corner, free kick awarded for an unfair challenge on David Forde by Sam Baldock. David Forde takes the free kick.79:40
The ball is sent over by Cole Skuse, blocked by Danny Shittu.77:54
Corner taken right-footed by Albert Adomah from the left by-line, save by David Forde.76:40
Effort on goal by Stephen Pearson from long range goes over the bar.75:43
Effort from range distance by James Henry goes wide of the right-hand upright.72:34
The free kick is swung in right-footed by James Henry.72:34 Booking
Booking Lewin Nyatanga is cautioned by the ref for unsporting behaviour.72:26
Unfair challenge on Andy Keogh by Lewin Nyatanga results in a free kick.
Sam Baldock concedes a free kick for a foul on Danny Shittu. Shane Lowry takes the direct free kick.71:07
James Henry crosses the ball, Andy Keogh has a headed effort at goal from deep inside the area missing to the right of the target.69:01 Substitution
Substitution Martyn Woolford joins the action as a substitute, replacing Neil Kilkenny.69:01 Substitution
Substitution Ryan Taylor is brought on as a substitute for Steven Davies.66:52 Substitution
Substitution Andy Keogh joins the action as a substitute, replacing Chris Wood.66:19
The referee blows for offside against Sam Baldock. Free kick taken by David Forde.65:36
Scott Malone produces a left-footed shot from just outside the box that goes wide right of the goal.64:31
Cole Skuse has an effort at goal from outside the area which goes wide right of the goal.60:45
Steven Davies has an effort at goal from deep inside the area missing to the left of the target.59:29
Chris Wood is flagged offside by the assistant referee. Tom Heaton takes the free kick.57:37
Inswinging corner taken right-footed by Albert Adomah.56:50
Inswinging corner taken right-footed by James Henry from the left by-line, clearance made by Liam Fontaine.56:25
James Henry crosses the ball.53:43
Unfair challenge on Neil Kilkenny by Liam Trotter results in a free kick. Steven Davies has an effort direct from the free kick.53:11
Short corner taken by Albert Adomah.51:14
Albert Adomah conjures a left-footed shot from inside the six-yard box that clears the bar.50:28
A cross is delivered by Scott Malone, Liam Fontaine makes a clearance.46:47
Liam Trotter is ruled offside. Direct free kick taken by Tom Heaton.45:29
James Henry is penalised for handball and concedes a free kick. Tom Heaton takes the free kick.45:01
The referee gets the second half underway.45:00 +2:23 Half time
Half Time The whistle is blown to end the first half.45:00 +1:23
Cole Skuse produces a left-footed shot from long distance which goes wide right of the goal. Inswinging corner taken from the right by-line by Steven Davies, Chris Wood manages to make a clearance.44:55
Scott Malone crosses the ball, Chris Wood takes a shot. Save by Tom Heaton.43:11
Sam Baldock produces a right-footed shot from just outside the box that misses to the right of the target.39:37
Unfair challenge on Darius Henderson by Lewin Nyatanga results in a free kick. James Henry delivers the ball from the free kick right-footed from right channel, Tom Heaton makes a comfortable save.37:12
Alan Dunne provided the assist for the goal.37:12 Goal scored
Goal! - Darius Henderson - Bristol C 1 - 1 Millwall Darius Henderson scores a headed goal from inside the six-yard box. Bristol City 1-1 Millwall.37:12
Alan Dunne sends in a cross,36:48
Liam Trotter takes a shot. Blocked by Cole Skuse.32:50
Mark Wilson crosses the ball.31:43
The assistant referee flags for offside against Sam Baldock. Direct free kick taken by David Forde.29:49
Shot from outside the area by James Henry misses to the left of the goal. Corner taken right-footed by James Henry from the left by-line to the near post, clearance made by Cole Skuse. Sam Baldock crosses the ball, clearance by Danny Shittu.27:46 Goal scored
Goal! - Steven Davies - Bristol C 1 - 0 Millwall Steven Davies scores a headed goal from outside the penalty area. Bristol City 1-0 Millwall.25:35
Steven Davies produces a left-footed shot from just outside the area that goes harmlessly over the bar.24:59
Jack Smith challenges Albert Adomah unfairly and gives away a free kick. Free kick taken by Neil Kilkenny.22:57
Free kick awarded for an unfair challenge on James Henry by Steven Davies. Liam Trotter restarts play with the free kick.14:21
Free kick awarded for a foul by Shane Lowry on Sam Baldock. Cole Skuse takes the direct free kick.13:46
Steven Davies is caught offside. Free kick taken by David Forde.11:54
Steven Davies produces a left-footed shot from just outside the area that goes wide left of the goal.10:39
Steven Davies takes a shot. Save made by David Forde.9:45
Darius Henderson produces a left-footed shot from deep inside the area which goes wide of the left-hand post.8:44
Darius Henderson challenges Liam Fontaine unfairly and gives away a free kick. Tom Heaton restarts play with the free kick.7:27
Free kick awarded for a foul by Jack Smith on Albert Adomah. The free kick is swung in left-footed by Stephen Pearson.5:35
Stephen Pearson challenges James Henry unfairly and gives away a free kick. Scott Malone crosses the ball in from the free kick, Tom Heaton makes a comfortable save.3:44
Stephen Pearson produces a left-footed shot from just outside the penalty box that goes wide left of the target.0:00
The referee gets the match started.
Live data and text provided by our data suppliers