John Lester (2-2) improved to 11-0 in his last 15 regular-season home starts, allowing three runs and six hits in six-plus innings. He left with a 9-1 lead after giving up singles to Jose Peraza, Tucker Barnhart and Arismendy Alcantara in the seventh.
Cincinnati has lost six straight, its longest skid since dropping 11 in a row last May. Recalled from Triple-A Louisville, Garrett gave up six runs and five hits in four innings.
Chicago led 9-4 in the ninth before Brian Duensing hit Joey Votto on the back, loading the bases with no outs. Koji Uehara retired Adam Duvall on a sacrifice fly, then struck out Eugenio Suarez and Stuart Turner, both on three pitches, for his first save this season.
RHP Barrett Astin was optioned to Louisville.
Reds: C Devin Mesoraco (tight hamstring) was out of the lineup for the third straight game and might be headed to the disabled list. "We haven't gotten to that point yet," manager Bryan Price said. "There's been improvement each day. But it's a hamstring. It's not the same as an oblique, but I think it can be as easily exacerbated." Mesoraco was limited to a combined 39 games in 2015 and 2016 because of injuries to both hips and his left shoulder.
Reds: After going the distance in his first big league start since 2014, RHP Lisalverto Bonilla (0-1, 4.85 ERA) is slated to be on the mound when the Reds open a five-game homestand against Colorado and LHP Tyler Anderson (2-4, 6.43) on Friday. Bonilla pitched a six-hitter for his first big league complete game, a 3-1 loss to San Francisco on Saturday.