Buster Posey belted a two-run homer and knocked in three runs to back five-plus innings from Madison Bumgarner, as the San Francisco Giants took a 10-5 win over the Arizona Diamondbacks.
Bumgarner (5-4), who had lost his three previous decisions, gave up five hits and three runs and had four strikeouts.
Brandon Crawford went 4-for-5 with an RBI and scored once, and Hunter Pence also went deep and scored three times. Brandon Belt had a 3-for-5 night with a run scored, as the Giants snapped a two-game skid and won for just the second time in their last 10 road games.
San Francisco, which, had scored eight runs over its previous six games, raced to a 9-0 lead Saturday.
Trevor Cahill (3-7) was pounded for nine hits and eight runs over 3 2/3 innings.
"It's the ups and downs of a season. We'll try to get him straightened around for his next start," Diamondbacks manager Kirk Gibson said. "He didn't have a lot of movement on his sinker. He didn't have good stuff."
Paul Goldschmidt, who had a run-scoring groundout in the sixth inning, tied a team record by recording an RBI in eight straight games. Luis Gonzalez also accomplished the feat, June 3-11, 2002.
Pence got on base via fielder's choice in the second inning and stole a pair of bases, the last of which he scored on when Miguel Montero committed a throwing error. Andres Torres then walked and scored on Crawford's double to right field. The throw home was perfect and it appeared Montero applied the tag to the left shoulder, but home plate umpire Greg Gibson signaled safe.
The Giants tacked on six runs in the fourth inning. Torres' sacrifice fly plated Pence. With runners on the corners, Bumgarner put down a successful squeeze bunt to score Belt. Gregor Blanco doubled in a run and Marco Scutaro singled up the middle for another score. Posey then drilled a homer to left field.
Posey singled in Bumgarner in the sixth inning for the nine-run cushion before Arizona scored four times in its half of the frame. A.J. Pollock doubled in a run and later scored on Montero's sacrifice fly. Cody Ross scored on a passed ball from Posey. Reliever Ramon Ramirez was late getting to the plate to cover the bag.
Pence led off the seventh with a homer to right off Willie Harris and Willie Bloomquist doubled in Arizona's final run in the ninth.
Before the game, the Giants activated infielder Tony Abreu from the 60-day disabled list, transferred pitcher Ryan Vogelsong to the 60-day DL and optioned infielder Nick Noonan to Triple-A Fresno ... Bumgarner, making his 100th career major league appearance, threw 87 pitches ... The Diamondbacks tied a National League record by not being shut out yet this season after 62 games. That ties the mark set by the 2006 Phillies to start a campaign ... Giants third baseman Pablo Sandoval left the game due to an injured foot ... The Giants have won eight of their last 10 on the road against Arizona.