Julian Merryweather (5-1) recorded three strikeouts in 1 1/3 innings of relief and picked up the win. Adbert Alzolay survived a shaky ninth for his 19th save.
The game was delayed 35 minutes by inclement weather.
Kerry Carpenter hit a grand slam for the Tigers.
Detroit starter Tarik Skubal allowed four runs and struck out seven in six innings. Cubs starter Jameson Taillon had a no-hitter through five innings but gave up four runs in 5 2/3 innings.
The Cubs scored a run in the second. Seiya Suzuki doubled down the left-field line and Jeimer Candelario brought him home with a two-out, line-drive double to left.
Chicago extended its lead in the third. Nico Hoerner singled and Dansby Swanson walked before pulling off a double steal. Bellinger brought them both home with a single up the middle.
The Cubs made it 4-0 in the fourth. Gomes lined a single off Skubal's leg to lead off. Gomes advanced on a groundout and scored on Nick Madrigal's two-out single to left.
Detroit tied it in the sixth. Andy Ibanez, who homered twice Tuesday, delivered the Tigers' first hit with a leadoff single. Jake Rogers and Akil Baddoo followed with singles to load the bases. Taillon retired the next two batters before Carpenter lofted a 3-1 offering over the right-field wall for his 20th homer.
Chicago regained the lead against Beau Brieske (0-2) in the eighth. Ian Happ reached on an error and Suzuki drew a two-out walk. Gomes then ripped a run-scoring single to left.
Merryweather struck out the side in the eighth.
Chicago tacked on a run in the ninth. Candelario walked and pinch-hitter Christopher Morel singled. They advanced on a sacrifice and Candelario scored on Hoerner's sacrifice fly.
Detroit had runners in scoring position with two out in the ninth, but Alzolay struck out Rogers to end the contest.
—Field Level Media