The 33-year-old, who made 27 Premier League appearances for the Canaries in 2015-16, has signed a two-year deal.
The former Middlesbrough and West Ham United man, who began his career at Portsmouth, has won promotion from the Championship with four different clubs.
"Gary is a really good signing for us, who adds everything we need to our midfield," head coach Lee Johnson said.
"He may have just turned 33, but he's still fully mobile and very fit. He's a really good decision maker who can be a coach's eyes and ears on the pitch."
O'Neil helped QPR to promotion via the play-offs before his move to Norwich in 2014 and has played more than 200 top-flight games.
Find all the latest football transfers on our dedicated page.
Bristol City have signed midfielder Gary O'Neil on a free transfer from recently relegated Norwich City.