The start of the game was delayed for more than 3 hours due to rain, but Garza (2-1) rolled through the Astros with eight strikeouts.
Chris Carter hit a long ball for the Astros in the seventh.
The three Chicago runs came against Dallas Kuechel (4-4), who worked six innings and struck out a career-best nine.
Kevin Gregg worked a perfect ninth with one strikeout to collect his 11th save in as many chances.
Exploding whale video goes viral on Internet
Reindeer recovered after escaping from Santa during lighting ceremony