Anthony Rizzo's RBI groundout capped a four-run eighth inning for Chicago, which has come from behind in each of its last eight wins.
Eugenio Suarez homered and Billy Hamilton added three hits and three stolen bases for Cincinnati, which had its five-game winning streak against the Cubs snapped.
Randy Rosario (4-0) allowed two hits in 2 1/3 innings to get the win. Brandon Marrow worked the ninth for his 20th save.
The Reds took a 7-4 lead into the eighth, but reliever Amir Garrett — who retired three straight batters in the seventh — walked Victor Caratini and Addison Russell to start the inning. Pinch hitter David Bote then singled to load the bases.
Jared Hughes (2-3) replaced Garrett and Ben Zobrist greeted him with a two-run double to left-center to trim the deficit to 7-6. Baez followed with a comebacker, but Hughes bobbled the ball and then fell down as he picked it up. Baez was credited with an RBI infield hit as Bote scored for a tie at 7.
Rizzo then drove in Zobrist with a groundout to second base to put Chicago on top.
The five-run deficit was the largest the Cubs have overcome during the eight comeback wins.
Suarez's three-run blast in the third gave the Reds a 5-0 lead.
Chicago moved closer with a pair of runs in the fourth. Caratini drove in the first with a double and then scored on an RBI groundout by Russell.
Cincinnati reclaimed the five-run advantage with single runs in the fifth and sixth innings on RBI singles by Jesse Winker and Joey Votto.
The Cubs made it 7-3 in the bottom of the sixth as Rosario drove in a run with a single for his first major league hit and RBI.
Baez's solo shot leading off the seventh trimmed the deficit to three runs.