SAN FRANCISCO -- Matt Duffy's two-out, walk-off single off Steve Cishek capped a two-run ninth inning that lifted the Giants to a 3-2 victory over the Marlins on Sunday at AT&T Park.
Cishek entered the ninth without allowing a run in 13 career games against the Giants. The right-hander was seeking his ninth save against San Francisco, but instead blew his third save in six chances.
"Still riding the high a little bit right now," Duffy said after the game. "Definitely feels good coming through for the team like that."
San Francisco right-hander Ryan Vogelsong and Marlins right-hander Mat Latos each gave up one run in seven innings, and the game got interesting when the relievers entered.
The Marlins took a 2-1 lead in the eighth inning when pinch-runner Donovan Solano scored on Sergio Romo's wild pitch. But in the ninth, the Giants got to Cishek, loading the bases with one out. Cishek struck out pinch-hitter Angel Pagan for the second out. But after getting ahead of Nori Aoki 1-2, Cishek walked Aoki, tying the game. Duffy slapped his game-winning single to left, enabling the Giants to gain a 2-2 split in four games with Miami.
"I was hoping [Cishek] would get out of it," Marlins manager Mike Redmond said. "It was one of those situations where he got jammed up. He walked the guy [Aoki]. It's unfortunate. It would have been a nice win."
MOMENTS THAT MATTERED Yelich stolen base pays off: The Marlins claimed a one-run lead in the fourth inning on a pair of two-out hits. Christian Yelich, using a pink bat, singled to center. He stole second, giving him two steals on the season. It was a big base, because Michael Morse delivered a ground-rule double to right-center. If not for the stolen base, Yelich would have been stopped at third. The RBI was Morse's first since April 28, and the double was the first baseman's first since April 14.
SF steal sets up run: San Francisco didn't even have a runner in scoring position until Aoki stole second base after leading off the sixth with a single. Once the Giants were able to move Aoki to third, Brandon Belt drove him home with a solid single to left to knot the score at 1. Aoki has recorded nine of his team's 17 stolen bases this year.
"He's a tough out," Giants manager Bruce Bochy said of Aoki.
Out at home: The Marlins nearly took a 3-1 lead in the top of the ninth. After Morse blooped a single in front of a diving Justin Maxwell in right field, Yelich rounded third to try to score an insurance run. Yelich's fingertips just missed the plate on a close play at home, and he was eventually called out by umpire Mark Wegner while dancing around catcher Andrew Susac trying to score.
"He made a good play. It was a close play at the plate. I just missed [the plate]. I was out. It was a big play in the game," Yelich said. More >
Breather for starters: Miami gave Giancarlo Stanton a breather, while San Francisco regulars Buster Posey, Angel Pagan and Brandon Crawford didn't start. Each starting pitcher took advantage. Latos allowed one run on seven hits in a season-high seven innings. Vogelsong gave up one run on four hits with five strikeouts in seven innings. Posey, Pagan and Crawford each did pinch-hit. Crawford struck out in the seventh, while Posey was intentionally walked to load the bases in the ninth before Pagan struck out. More >
"Just having to come back from that is more of a, I don't want to say a fresh start. I didn't really have a great spring. Then you kind of push it into the season. It [stinks] that it pushed into the season. That's what I've been known for, my Aprils are terrible for some reason. April doesn't like me. I'm getting [now] into the swing of things." -- Latos, revealing for the first time his left knee (which underwent surgery last season) had fluid drained during Spring Training. Now he's finding his rhythm.
REPLAY REVIEW Gregor Blanco reached on an infield single in the fifth inning. Marlins shortstop Adeiny Hechavarria needed a split second to get the ball out of his glove, and Blanco beat the throw to first. Miami challenged, and after a review of two minutes, 19 seconds, the ruling was the call stands.
SOUND SMART WITH YOUR FRIENDS Dee Gordon extended his hitting streak to 13 games, matching his career high. Gordon had two doubles and now has 54 hits through his first 29 games. That's tied with George Sisler (1922) for the third-most hits for a player through his first 29 games since 1914.
WHAT'S NEXT Marlins: After wrapping up four games at San Francisco, the Marlins on Monday open the first of three at Dodger Stadium. Tom Koehler (2-3, 5.18) makes his seventh start of the season. In his last outing, Koehler surrendered five runs in six innings, including three homers to Bryce Harper, at Washington. Los Angeles is starting right-hander Zack Greinke (5-0, 1.56).
Giants: San Francisco will look for right-hander Chris Heston (2-3, 3.38) to rebound in Tuesday's series opener at Houston. Heston is trying to reclaim the consistent form he possessed to start the year. He lasted a season-low five innings In his last outing, when the Padres knocked him around for five earned runs on 11 hits and three walks.
Alex Espinoza is a contributor to MLB.com. Joe Frisaro is a reporter for MLB.com. He writes a blog, called The Fish Pond. Follow him on Twitter @JoeFrisaro. This story was not subject to the approval of Major League Baseball or its clubs.