Isaiah J. Downing-USA TODAY Sports

Kyle Harrison tossed seven innings of four-hit ball, Jung Hoo Lee had three hits and the San Francisco Giants beat the Colorado Rockies 5-0 on Tuesday in Denver.

Harrison (3-1) produced the longest outing of his two-year career, helping San Francisco snap a four-game skid. Harrison struck out two and walked for the Giants, who bounced back from getting swept in a four-game set at Philadelphia.

Nick Ahmed had two hits for San Francisco, and LaMonte Wade Jr. had a two-run single.

Colorado took its eighth loss in nine games. The Rockies are off to their worst start in franchise history, and their eight wins are tied with the Chicago White Sox for the fewest in the majors.

The Rockies managed just four singles against Harrison and two relievers and had only two runners advance to second base.

The game was scoreless until the Giants struck in the fourth inning against Colorado starter Dakota Hudson. With one out, Matt Chapman walked, went to third on Blake Sabol's single to right and scored on Ahmed's single.

Lee's single loaded the bases and Thairo Estrada's RBI groundout made it 2-0. Ty Blach relieved Hudson and was greeted with Wade's two-run single to center before Blach got the final out of the inning.

Hudson (0-6) allowed four runs on five hits, walked five and struck out two in 3 2/3 innings.

San Francisco padded its lead in the seventh but missed an opportunity to blow it open. Estrada led off with a single, went to second on Wade's third walk of the night and scored on Michael Conforto's single.

A flyout to left moved the runners up to second and third with one out, but Blach fanned Mike Yastrzemski and Nick Mears came on and got Chapman to pop out to short.

Giants reliever Ryan Walker struck out the side in order in the eighth inning. Camilo Doval walked two in the ninth before fanning the final two batters to end the game.

More must-reads:

TODAY'S BEST
Juan Soto's bat speed decline threatens Mets' $765 million investment
Insider suggests four-time Pro Bowl option for Steelers if Aaron Rodgers doesn't sign
Watch: Pacers, Tyrese Haliburton eliminate the Bucks in OT
Stanley Cup playoffs takeaways: Hurricanes advance, panic time for Maple Leafs
NFL team executive expands on what Browns' Shedeur Sanders did wrong before draft
Jayson Tatum's historic game helps send Celtics to Eastern Conference semis
Yankees offense goes nuclear in blowout win
Pirates ace Paul Skenes explains why he's not concerned about potential injuries
Steelers may have found another steal in UDFA pool as Pittsburgh lands an athletic freak
49ers sign star TE to four-year extension
Spurs' Stephon Castle runs away with Rookie of the Year Award
Kings to make Doug Christie new head coach in full-circle moment
Vikings QB J.J. McCarthy sends strong message about whether he's ready to start in 2025
Pistons' Cade Cunningham comes alive in fourth quarter to stave off elimination vs. Knicks
Cubs defeat Pirates with an impressive night at the plate
Watch: Blue Jays' Daulton Varsho makes potential catch of the year
How Steelers reportedly expect Aaron Rodgers saga will end
Watch: Yankees open game with three straight home runs ... again
Ousmane Dembele strike lifts PSG over Arsenal in first leg of Champions League semifinal
Report: CB Jaire Alexander might stick with Packers