Holliday connected for a two-run homer with one out in the sixth inning to end the Cardinals' three-game losing streak.
Garcia (3-1) allowed a run and scattered seven hits before stepping aside for Edward Mujica, who struck out the side in the ninth for his fifth save.
The loss spoiled a solid outing for Reds starter Bronson Arroyo (2-3), who took the loss despite an efficient seven innings in which he allowed two runs on six hits and threw just 78 pitches.
Arroyo held a 1-0 after Shin-Soo Choo stroked an RBI double in the fifth inning. But St. Louis claimed the lead in the sixth when Carlos Beltran singled and Holliday lined an off-speed pitch from Arroyo into the left-centerfield seats.