San Francisco won for the 10th time in 13 games, improving the best record in the majors to 38-21.

Morse hit a solo shot and Perez had a two-run homer off left-hander Tony Cingrani (2-6), who has lost all of his four starts since returning from shoulder tendinitis.

Ryan Vogelsong (4-2) extended his recent streak of solid pitching by giving up two runs and seven hits in 6 1/3 innings while fanning a career-high nine. The right-hander is 3-0 with a 2.05 ERA in last four starts.

It was a rare win in Cincinnati for the Giants, who had lost 11 of their last 12 at Great American Ball Park during the regular season. San Francisco won all three there while taking the division playoff series in 2012.

Vogelsong gave up Todd Frazier's team-leading 11th homer in the third inning, a ball that hit the screen on the left field foul pole. Jay Bruce added a run-scoring double, his third RBI in the last two games. Bruce came into the series with no RBIs since April 25.

Sergio Romo pitched the ninth for his 18th save in 20 chances. He had allowed a run in each of his last three outings.

Billy Hamilton had three singles off Vogelsong, matching his career high. It was his sixth three-hit game.

Cingrani has been trying to get back into form after being on the disabled list for 17 days because of tenderness in the left shoulder. His velocity has been inconsistent -- the left-hander throws mostly fastballs -- while he's gone 0-4 with a 5.16 ERA in his four starts.

With Cingrani trying to hold a 2-0 lead with two outs in the sixth, Morse hit his team-leading 12th homer on the first pitch. Cingrani gave up a single by Brandon Hicks, and Perez hit his first homer of the season and the second of his career for a 3-2 lead.

It was only the fourth time in 28 career starts that Cingrani allowed more than one homer.

Hamilton ran the Giants to distraction again, but this time they prevented him from scoring. Hamilton had two infield singles among his three hits, forced two throwing errors and was caught by catcher Buster Posey while he trying to steal third base.