CHICAGO — Eddie Butler pitched three-hit ball into the sixth inning, Kris Bryant hit a two-run homer and the Chicago Cubs beat the Miami Marlins 3-1 on Monday night for their fourth straight win.

Albert Almora Jr. added a solo shot as Chicago remained perfect on its 10-game homestand after going winless on a six-game West Coast trip. With closer Wade Davis on paternity leave, Mike Montgomery tossed 31/3 innings for his second save in his first appearance since May 28.

Miami had won three straight and seven of eight. Marcell Ozuna had two hits, but the Marlins’ lineup struggled for the most part on an unseasonably cool, breezy night at Wrigley Field.

Butler (3-1) was working on a shutout before Dee Gordon hit a sacrifice fly in the sixth, trimming Chicago’s lead to 3-1. Giancarlo Stanton followed with a two-out double, chasing Butler.

Montgomery then got Christian Yelich to bounce to second to end the inning. The Marlins threatened again in the seventh, getting Ozuna to third with one out, but Montgomery struck out Derek Dietrich and retired Tyler Moore on a grounder.

Butler struck out four and walked one, bouncing back nicely from a shaky start at San Diego last Tuesday. He threw just 66 pitches against the Marlins, 45 for strikes.

Miami right-hander Dan Straily (4-4) struggled with location early on, but eventually settled down and pitched seven solid innings. He had won his last three starts.

Ben Zobrist led off the Cubs first with a double off the wall and Bryant followed with a deep drive to the bleachers in left, powering the ball through a stiff wind. Bryant is 5 for 10 against Straily in his career with three homers and eight RBI.

REDS 4, CARDINALS 2: Eugenio Suarez and Scooter Gennett hit consecutive two-run doubles in the seventh inning, and host Cincinnati came from behind to beat slumping St. Louis.

St. Louis starter Carlos Martinez (4-5) was dominant through six innings before wilting in the seventh as the Cardinals dropped their fourth straight and eighth in 11 games.

The Reds had lost two in a row and five of six going into the opener of this four-game series.

GIANTS 7, BREWERS 2: Jeff Samardzija pitched deep into the game after a shaky beginning, Aaron Hill had a tiebreaking, pinch-hit double in the eighth inning and San Francisco won in Milwaukee.

Hill drove in two with two outs off reliever Rob Scahill (1-2).

Samardzija (2-7) surrendered two runs in the first but quickly settled down, retiring 19 consecutive batters in one stretch.

Milwaukee’s first-inning runs came in an unusual fashion. With runners on second and third and one out, Hernan Perez lofted a fly to left. Eric Sogard tagged and scored when left fielder Orlando Calixte’s throw sailed high over catcher Buster Posey and caromed off the wall behind home plate. The ball dropped behind the padding and out of play, allowing another run to score.

PHILLIES 11, BRAVES 4: Odubel Herrera continued his power surge with a two-run homer and two doubles, Tommy Joseph homered and drove in three runs, and Philadelphia won in Atlanta.

Herrera became the first Philadelphia player to hit two doubles in three straight games, according to Phillies records dating back to 1913. He had three extra-base hits for the second straight game, with a homer in each one.