SAN FRANCISCO -- Kaz Matsui didn't get the ball out of the infield his first four at-bats, including striking out with two runners on in the seventh. He changed his whole night his fifth time up.
"I put everything I had into that last at-bat," Matsui said through an interpreter. "Until then I was really frustrated. I just wanted to hit the ball."
Pinch-hitter Steve Finley's one-out infield single against Armando Benitez (0-2) started the winning rally. He advanced to second on Kevin Frandsen's throwing error and scored on Matsui's single into right field.
"That's how the game goes," Colorado manager Clint Hurdle said. "He had four at-bats and wasn't able to square anything up and he made a swing on that pitch, got himself in scoring position and scored a run."
Matsui stole second and scored on Matt Holliday's third hit of the game.
Jeremy Affeldt (2-1) pitched the eighth for the win and Brian Fuentes got three outs for his 14th save in 15 chances.
"I'm doing my job, I got three groundballs and what happened?" Benitez asked. "We had an opportunity to win the game. How many times we got somebody on base and nobody moved him? Somebody had to pay and the person that paid was me. He hit a good pitch, a slider away, and a sinker."
San Francisco led 3-0 after six innings but pinch-hitter Ryan Spilborghs and Willy Taveras each drove in a run with two outs in the seventh to get the Rockies within one. Brad Hawpe's two-out double in the eighth tied it at 3.
"We let it slip away," Giants manager Bruce Bochy said. "We couldn't add on to put the game away and they were able to come back on us."
Barry Bonds went 0-for-3 with a walk and remains 10 homers shy of tying Hank Aaron's career record of 755.
Bonds came up with the bases loaded and no outs in the first inning but Jason Hirsh got him to ground into a double play. Randy Winn scored to make it 1-0.
Ray Durham followed with an RBI double and scored with some help from a strong San Francisco breeze. The wind pushed Bengie Molina's infield popup away from first baseman Todd Helton and it landed on the infield lawn, allowing Durham to score from second.
"While the ball was inside the park it went one way," Matsui said. "When it got to its highest point, the wind took it the other way. I have to go for those kind of balls."
Giants starter Matt Cain also had some problems with the wind.
"It affected me a little bit in the second inning when I just couldn't feel the ball," he said. "It felt slick and I got my pitch count up."
Durham also made a key defensive play but he was part of a double switch in the seventh and wasn't around at the end.
Helton walked to lead off the fourth and advanced to second on a wild pitch. Garrett Atkins hit a soft liner that seemed destined for the right-center field gap but Durham timed his leap perfectly, came down with the ball and tossed to Rich Aurilia at second while Helton was cruising into third.
"The fly balls here are crazy," Hawpe said. "It doesn't sound like they're as tough as Candlestick but fly balls here are unbelievable. You never know what's going to happen to it. You try to keep your face on it the whole time and its tough. That seems to happen once a game here."
Cain, with a 1.40 ERA in 19 innings against the Rockies, allowed two runs and four hits over 6 2/3 innings for the Giants. He walked four and struck out five.
"They got the hits when they needed and that's kind of the way it goes," Cain said. "Little things happen. I make a good pitch and the guy puts the bat on the ball and it happens to fall in."
Hirsh gave up three runs and five hits. He walked two and struck out three.
Southern California football coach Pete Carroll was a visitor to the press box. ... With 41,274 fans in attendance, the game was declared a sellout, the sixth of the season. ... Holliday has reached base safely in 32 of his last 34 games. ... Affeldt committed his eighth career balk and the first since Sept. 27, 2004, when he was with Kansas City. ... Giants 1B Ryan Klesko singled in the third for his 1,500th career hit.