MIAMI -- Tim Hudson pitched seven innings, Jason Heyward drove in two runs and the Atlanta Braves beat the Miami Marlins 4-3 on Tuesday night.
Martin Prado and Freddie Freeman each drove in a run for the Braves, who snapped a three-game losing streak.
Jose Reyes hit a two-run home run for the Marlins as he extended his hitting streak to 12 games.
After issuing the homer to Reyes in the second inning, Hudson (9-4) retired 16 straight batters before he was relieved by Eric O'Flaherty.
"Hudson struggled in the beginning -- had a tough time throwing the ball over the plate -- but as the game went on he got better," Marlins manager Ozzie Guillen said.
Hudson allowed five hits and the three runs as he threw 54 of 80 pitches for strikes. He improved to 13-4 in 24 starts against the Marlins.
Heyward broke a 3-all tie in the seventh inning with an RBI single off Wade LeBlanc (1-1) that scored Prado, who tripled to lead off the inning.
O'Flaherty pitched a scoreless eight and Craig Kimbrel pitched the ninth for his 29th save in 30 chances.
Heyward's sacrifice fly scored the Braves' first run.
Hanley Ramirez tied the game with an RBI single as Justin Ruggiano was thrown out on a close play at home by Michael Bourn to end the inning.
Reyes' two-run homer down the right-field line gave the Marlins a 3-1 lead. It was his sixth of the season.
Mark Buehrle issued a bases-loaded walk to Freeman to pull the Braves within 3-2. Prado's sacrifice fly tied it.
Buehrle walked a season-high four batters. He allowed three runs -- two earned -- and five hits in five innings.