SAN FRANCISCO -- Matt Cain commanded his fastball from his first pitch to his last and produced a gem more reminiscent of his standout rookie season than his hard-luck year of 2007.
Cain struck out eight in seven innings to win his third straight start, Bengie Molina homered and Randy Winn drove in two runs in the San Francisco Giants' sixth straight victory, 3-1 over the Colorado Rockies on Tuesday night.
"It feels good," Cain said. "It's a confidence booster."
Molina hit a solo homer in the sixth and also singled twice, and Winn's infield single in the third put San Francisco ahead and gave him a nine-game hitting streak. Winn then he added a sacrifice fly in the fifth. Rajai Davis scored both times and also doubled off the left-field wall for one of his two hits.
The Rockies fell 5½ games behind San Diego in the wild-card race with their second loss in two days in San Francisco. They've scored only two runs total in the losses.
Colorado's Matt Holliday had his career-best hitting streak stopped at 17 games. It was the longest streak for the Rockies in four years.
"The rest of our games are important games," Holliday said. "We have to start going out and playing better, playing loose -- go out and have fun and score some runs."
Cain (7-13) allowed a leadoff single to Kazuo Matsui in the first and didn't give up another hit until Cory Sullivan singled to start the sixth. After a two-out walk to Brad Hawpe in the second, the right-hander retired the next 10 Colorado batters before Sullivan's base hit.
"He had his good fastball tonight and his stuff was up from his previous outings when he's thrown really well," manager Bruce Bochy said. "You look at his last few starts and they have been good ones."
The Giants played their 30th game in a stretch with 31 contests in a 30-day span, and are eagerly awaiting a day off Thursday before beginning a weekend series at Washington on Friday.
Barry Bonds went 0-for-4 before being replaced in left field in the eighth. He grounded out in the first, third and seventh innings and popped up in the fifth on a clear Bay Area night -- complete with a full moon in the distance behind the bleachers in right-center where he hit his 756th home run to break Hank Aaron's record earlier this month.
The 43-year-old slugger grounded into an inning-ending double play in the third -- one of three Giants double plays in the first four innings.
Cain allowed four hits and one run with two walks one day before the two-year anniversary of his major league debut against the Rockies, which he lost despite a solid five-inning performance. He owns his first three-start winning streak all year, earning his fourth victory in five starts on the heels of a five-start winless stretch in which he went 0-3.
"Sometimes those just don't come," Cain said of winning streaks. "It's definitely something that's nice."
Now, he looks forward to having a shot at 200 innings as well as the 10-win mark.
Former Giant Yorvit Torrealba hit a two-out triple in the seventh, then Sullivan followed with an RBI double for the Rockies' first run. Cain received a mound visit from pitching coach Dave Righetti before striking out pinch-hitter Ryan Spilborghs.
Brian Wilson pitched out of trouble in the eighth and Brad Hennessey got the final two outs for his 13th straight save and 16th in 18 chances overall.
Sullivan had three of the Rockies' seven hits, including two doubles. He ended an 0-for-14 stretch with a single in the sixth.
Franklin Morales (0-2), a left-hander making just his third major league start, allowed two runs and six hits in five innings, but didn't strike out a batter while allowing three walks. But he kept from becoming the 449th different pitcher to surrender a homer to the Bonds.