Matt Cain allowed only one run in seven innings to continue his recent string of strong starts. Cain (8-9) has a 1.81 ERA in his last seven starts, but he's only 3-2 in that span.
Cain gave up six hits and a walk, and struck out five. Brian Wilson pitched the ninth for his 33rd save.
Atlanta has lost four straight at Turner Field in the five-game skid. The Braves are 5-15 at home in July and August.
Bengie Molina also had four hits and drove in two runs. The Giants had 15 hits, one shy of their season high, and ended a four-game losing streak.
Molina's single to right drove in Fred Lewis to give the Giants a 1-0 lead off Jair Jurrjens in the first.
Dave Roberts reached on an infield single in the third and stole second. Roberts moved to third on a wild pitch and scored on Winn's fly ball to right for a 2-0 lead.
The Braves scored their only run off Cain in the sixth. Mark Kotsay, who hit for the cycle on Thursday night, led off with a double to right for his second hit. Kotsay moved to third on a wild pitch and scored on Chipper Jones' single to left.
Jurrjens (11-8) lasted at least six innings for the 12th straight start and set a career high with nine strikeouts. The rookie right-hander gave up eight hits and two runs with no walks in seven innings.
The Giants quickly added to a 2-1 lead as soon as Jurrjens left the game. Winn led off the eighth with his homer to left off Will Ohman. Lewis added a single to knock Ohman out of the game and moved to third on Molina's single to left off Jeff Bennett.
Travis Ishikawa drove in Lewis with another single to left for a 4-1 lead. The ball skipped past Gregor Blanco for an error. Bennett issued an intentional walk to Eugenio Velez to load the bases with no outs, but the Giants could not score another run.