Nate McLouth led off the Braves' 10th against Luis Ayala (1-3) with a single. After a sacrifice and an intentional walk to Chipper Jones, McCann hit a 2-2 pitch over the right-center field wall.
Cody Ross led off the eighth with his 15th home run to bring the Marlins within 3-2. After former Augusta GreenJacket Hanley Ramirez was intentionally walked with runners on second and third, Florida tied it on Jorge Cantu's infield single.
Peter Moylan (3-2) worked the ninth for Atlanta and Rafael Soriano recorded his 15th save in 17 chances as the Braves moved one game behind Florida for second place in the NL East.
Even having lost the first two games of this series, the Braves are 18-10 since they were a season-worst six games under .500 on June 27.
The recent surge has put them back in the mix of teams fighting for the NL wild card.
Casey Kotchman's double in the second inning scored McCann and Yunel Escobar and gave Atlanta a 2-0 lead. McLouth's RBI single in the seventh put the Braves ahead 3-1.
It was another start with little support for Atlanta's Javier Vazquez. Vazquez struck out eight and allowed three runs in 7Q innings for a no-decision that ended his three-game winning streak.
Rick VandenHurk had a career-high nine strikeouts and gave up two runs in six innings for Florida.