The D-backs are 4-0 against the Astros this season and 15-6 in their last 21 games against left-handed starters.
With more than 100 family members in town from Hammond, La., rookie left-hander Wade Miley picked up his 13th win, spreading eight hits over six innings. He struck out five and walked zero.
He didn't make it easy, though, loading the bases in the first inning and allowing the leadoff man to reach in four of his six innings.
"I look back and I felt like I was always in a bind early," Miley said. "I just wanted to do what I can to keep the lead."
The D-backs seized the lead for good in the fifth. Gerardo Parra and Wil Nieves hit back-to-back singles off starter Dallas Keuchel with one out. With Parra on third, Miley laid down a safety squeeze bunt down the first-base line, allowing Parra to score easily.
Houston native Chris Young hit his 18th double of the season high up the left-field wall to score Nieves and give the D-backs a 2-0 advantage.
The Astros plated a run in their half of the fifth behind Marwin Gonzalez's leadoff double.
In the eighth, Hill doubled off reliever Fernando Rodriguez with one out and came home on a hard-hit double by Paul Goldschmidt to give the D-backs an insurance run.
Reliever David Hernandez escaped a sticky situation in the eighth and closer J.J. Putz sealed the victory with his 15th consecutive save and 24th on the season. Putz hasn't given up a run in his last 17 2/3 innings, striking out 22 batters over that span.
"We weren't able to put up many runs, but our pitching did an amazing job tonight," Young said.
The D-backs got into Houston early Friday morning after a 2-1 rain-delayed victory over the Cardinals in St. Louis on Thursday.
"Nobody went to bed before 4 a.m.," Gibson said.
Young said the players weren't really bothered by the late night -- they just slept until 1 p.m. instead of getting up at 9 or 10 a.m.
"When you get to the field, you don't really think about the ride over that you had," Young said.
Miley didn't dominate, but he escaped jams when he needed to, starting in the first inning.
Jose Altuve and Tyler Greene led off the Astros' first inning with singles. Justin Maxwell followed with a one-out hit, loading the bases. Wiley retired Ben Francisco and Brandon Barnes to end the first without any damage.
"We thought we had him pretty good that first inning and he was able to calm back down and start making his pitches," Greene said. "He cruised all the way to the sixth inning. The guy's been having a good year and knows what he's doing out there."
Miley motored through the next three innings without much more trouble. The Astros manufactured a run in the fifth. With a runner on first and two outs in the sixth, Miley got Jason Castro to strike out, but the pitch got away from catcher Nieves, allowing Castro to reach. Miley struck out Gonzalez to end the inning.
"He didn't walk anybody, No. 1," Gibson said. "That's always a key. If you're making guys put the ball in play, you have a chance."
Miley threw 102 pitches, 70 for strikes, and lowered his ERA to 2.96. In two starts against the Astros this season, he is 2-0 with a 1.38 ERA.
Friday marked Miley's first start with a catcher other than Miguel Montero behind the plate. Miley said he and Nieves worked well together, executing a game plan they established before the first pitch.
"I don't recall shaking him off one time," Miley said.
The D-backs certainly want the offense to pick up soon -- they've averaged just 2.25 runs per game over their last four games. But they'll take a victory that helps them gain a game on the Dodgers in the National League West.
"We haven't been very good at winning ballgames when we haven't scored a lot of runs," Gibson said. "The last two nights, we've been very good, and I hope that continues."