Rosales' homer, his fourth, gave Cincinnati a 4-0 lead with one out in the top of the fourth.
Brandon Phillips hit a solo homer. Wladimir Balentien had two hits and one RBI and a run scored on a wild pitch for the Reds, who have won three of four.
Winner Aaron Harang (6-13) surrendered two runs and seven hits in seven innings with two walks and seven strikeouts.
Francisco Cordero got his 24th save despite giving up two hits in the ninth.
San Francisco's runs scored on two double play groundouts. Eugenio Velez and Freddy Sanchez had two hits each for the Giants, who had won three of four.
Losing pitcher Matt Cain (12-4) yielded five runs and seven hits in seven innings with two walks and seven strikeouts.