HOUSTON -- The Astros executed about as perfectly as they could on offense Wednesday afternoon without the benefit of bashing home runs all over Minute Maid Park.
They did the little things. They didn't run into outs on the bases -- which has been a problem -- they had some productive outs and they came through with runners in scoring position. In the end, they did just enough to overcome another blown save by the bullpen.
The ninth inning was a perfect illustration of fundamentals, as Jose Altuve bunted Jonathan Villar into scoring position and then watched him score the winning run on an RBI single by Trevor Crowe that gave the Astros a 6-5 win over the Twins.
"That's winning baseball," Astros manager Bo Porter said.
The walk-off win was Houston's fourth this season and first since it beat the A's on July 23. Villar, the rookie shortstop who was benched Tuesday because he unsuccessfully tried to stretch a single to a double early in the game, scored the winning run in that game, too.
Porter stuck him at the top of the lineup Wednesday after pulling him in the third inning Tuesday, and he was rewarded by Villar going 2-for-5 with a run scored.
"I went over and gave him a hug and told him, 'I'm very proud of you,'" Porter said. "That's maturity in less than 24 hours. A lot of guys would hang their head and say, 'Poor ole me, I got taken out of the game.' He didn't handle it that way at all. I said last night I really felt he was going to handle it the right way, and he came out today and literally showed he handled it the right way. He took ownership of it and told me it would never happen again."
The first five hitters in the Astros' lineup -- Villar, Altuve, Crowe, Brett Wallace and Chris Carter -- each had two hits, going a combined 10-for-21 with six runs scored. Crowe extended his hitting streak to six games and is 7-for-18 since he was called back up on Sunday.
"Baseball is a game of momentum, and you have to stay after it every single day, because one bad day and things are working against you," Crowe said. "I owe a lot of credit to Bo. When I got here, I was in a good rhythm, and he put me right in the lineup. And I feel like I'm still in that rhythm."
Jordan Lyles gave the Astros his third consecutive quality start by allowing three runs and four hits in 6 1/3 innings. The only damage the Twins managed against the 22-year-old came on a three-run homer by Alex Presley in the third inning that tied the game. It was a 13-pitch at-bat.
"You're just trying to make the next pitch go over the plate," Lyles said. "He's pretty much seen everything you have up to that point, so hopefully he rolls over it or pops it up, but he put a good swing on it and put the ball on the barrel."
Crowe's RBI single in the fourth put the Astros ahead, 4-3, and Brandon Barnes drove in his second run of the game with a fifth-inning sacrifice fly that made 5-3. With his bullpen needing some rest, Porter gave the ball to Erik Bedard to try to get the final eight outs.
"We were really shorthanded in the bullpen today," Porter said. "We knew we had him down there [and] that he could extend all the way to 85, 90 pitches. When we went to him, we knew we were going to him for the duration at that point, unless the game went extra innings."
Bedard allowed a run in the eighth and then suffered the Astros' 27th blown save of the season when Ryan Doumit led off the ninth with a homer to tie the game. He wound up pitching the final 2 2/3 innings for his fourth win.
But the Astros, who got a three-run homer from Barnes in the ninth inning Tuesday to force extra innings, rallied in the ninth against Brian Duensing (6-2). Villar singled to right and went to second on a perfect bunt by Altuve. Crowe then played the role of hero.
"If we want to be a very good team going forward in the future, those are the type of at-bats we've got to have," Crowe said. "We have to battle all 27 outs. We don't have those guys up and down our lineup who are going to hit 30 home runs. I think some guys may develop into that, but right now, we have to keep the line moving."
The Astros jumped on Twins starter Liam Hendriks in the first inning, scoring three times while taking advantage of three hits and a costly error by shortstop Pedro Florimon. Wallace and Marc Krauss had RBI hits, and Barnes gave Houston a 3-0 lead with a sac fly.
"You get those scoring opportunities and you're able to have productive at-bats," Porter said. "I felt like throughout the whole lineup, we did that well today."
Hendriks allowed five runs (three earned) and eight hits in 4 1/3 innings.
"Today was just embarrassing," he said. "I got behind guys. I left balls up. Once I was ahead, I was fine. I just wasn't ahead very often, and they made me pay for it."