Garcia, who missed last season after undergoing reconstructive left elbow surgery, allowed one run and two hits in relief of Kyle Lohse. He has yielded two runs while striking out 15 in 12 2/3 innings over four outings this spring.
"My arm feels awesome," he said. "It feels better than it has ever felt. I did everything I could in the offseason. Finally now I feel like everything is paying off. It's feeling good and everything is going the way it's supposed to go."
Garcia was thought to be a long shot for the spot because of the surgery, but his success has put him in a close race with McClellan while Hill has struggled.
"I thought Garcia really composed his delivery," manager Tony La Russa said. "He wasn't rushing or flying all over the place. He was impressive. This is the beginning of the next to last week. So everything you do now has extra significance. He added another credential to his spring training resume."
Lohse worked five innings in his fourth spring start. He gave up three runs and eight hits, struck out two and walked one.
"There are some things I would have done differently if it was a regular-season game," he said. "But you don't want to show all your stuff to a team that you're going to be facing four times. I felt like I did what I needed to do to get my work in and got out of it relatively unscathed."
Freese, competing to be the starting third baseman, has been having a so-so spring but he finished with two hits and three RBIs against Houston.
La Russa said Freese has been trying to do too much.
"Here in the last three or four games, David looks more like himself," he said. "I would be disappointed if they didn't press when they have a chance to make the big league club. But he's getting more settled into it. David's at-bats are getting better."
Ryan Ludwick also doubled twice and drove in two runs for the Cardinals, giving him 11 RBIs this spring.
Astros left-hander Wandy Rodriguez had one of his worst outings, allowing five runs and seven hits over four innings. He has a 9.69 ERA in four starts.
"I need to prepare more because I don't want to pitch like that," Rodriguez said. "I need to work on all my pitches because I missed a lot of my spots."
Geoff Blum started at shortstop as the Astros look for options with Tommy Manzella sidelined by a strained quadriceps. Blum looked pretty comfortable, making a nice barehanded pickup and strong throw to rob Felipe Lopez of an infield hit in the fourth.
Blum has played just 17 games at shortstop over the last three seasons. He also could start at first on opening day if Lance Berkman still is out following left knee surgery.
"With Tommy being down a few days, we just want to make sure," manager Brad Mills said. "We're going to see (Edwin) Maysonet over there, (Jeff) Keppinger. (Blum's) got good hands and a good arm. His experience and being able to position himself where he needs to be should help his range."
The Astros trimmed their roster to 41 by reassigning pitchers Josh Banks and Roy Corcoran and C Brian Esposito to minor league camp. ... Houston OF Michael Bourn (strained right oblique) was not in the lineup for the fourth straight game. ... The Cardinals optioned C Matt Pagnozzi to Triple-A Memphis, and reassigned pitchers Eduardo Sanchez, Oneli Perez, Fernando Salas and Pete Parise and INF Ruben Gotay to minor league camp.