Melky Cabrera tied a career high with four hits, including a home run, and scored all three runs Sunday for the San Francisco Giants to help Matt Cain beat the Miami Marlins 3-2.
Cabrera went 4 for 4 to hike his average to .369 and has 73 hits, most in the majors. He also stole two bases.
Cain (5-2) allowed two runs, one earned, and won for the fourth start in a row. Santiago Casilla gave up one hit in 1 1-3 scoreless innings for his 12th save in 13 chances.
Ricky Nolasco (5-3) allowed three runs in seven innings. Two of the runs scored on two-out extra-base hits.
The teams split the four-game series, and the Giants concluded a 4-3 trip.
The Marlins' lineup included three position players batting under .190, and they mustered only six hits against Cain and three relievers.
Miami went 2 for 10 with runners in scoring position. Teams are batting .138 against Cain in those situations this season.
Cabrera hit a two-out homer in the first. He led off the fourth with a single, stole second and scored on a sacrifice fly by Angel Pagan.
After Cabrera singled with two out in the sixth, Buster Posey hit an RBI double off the center-field wall near the 418-foot sign to put the Giants up 3-1.
Cabrera, who totaled four hits for the third time this season, was shaken up when he slid into second baseman Omar Infante's glove in the eighth but stayed in the game. He's batting .426 this month.
When the Giants shifted three infielders to the right side against Logan Morrison in the fifth inning, he foiled the strategy by bunting toward third for a hit to put runners at first and second. Cain retired the next two batters before Chris Coghlan singled home Miami's first run.
Miami scored an unearned run in the seventh after center fielder Pagan mishandled Bryan Petersen's single for an error — the 51st by the Giants, most in the majors. Petersen came home on a two-out single by Jose Reyes that made the score 3-2 and put runners at the corners, but Sergio Romo came on to strike out Infante and end the inning.
Romo lowered his ERA to 0.61. Casilla pitched more than one inning to earn a save for the first time since Oct. 3, 2010, and he lowered his ERA to 1.29.
Notes: Before the game, the Marlins selected the contract of OF Justin Ruggiano, who was acquired in a trade with Houston. He pinch hit in the eighth and struck out. ... Marlins OF Kevin Mattison was optioned to Triple-A New Orleans, and RHP Jose Ceda (right elbow) was transferred to the 60-day disabled list. ... Pagan made a diving, backhanded catch of John Buck's liner in left-center leading off the third inning. ... Aubrey Huff went 0 for 3 and is 2 for 20 (.100) lifetime against Nolasco. ... With a crowd of 30,199, the Marlins topped 30,000 at home for the 11th time. ... LHP Barry Zito, scheduled to start Monday when the Giants play the Diamondbacks, is 4-8 in 17 games against them with an ERA of 5.36.