In May 2015, García returned to pitch for the Cardinals. He lost his first start to the New York Mets, 5–0, despite allowing just two runs in seven innings. He gained his first win in nearly a year on May 26 against the Arizona Diamondbacks, in which he completed six innings in a 6–4 victory. His next start, on June 1, was against the Brewers. In seven innings, he allowed one run and struck out four, with less than 90 pitches, but ended up with a 1–0 loss, bringing his record to 1–2 with a 2.70 ERA in his first three games.
While completing 8 ⁄3 innings against the Miami Marlins on August 14 in a 3–1 win, one of the hits García allowed was to Ichiro Suzuki, for his 4,191st hit in professional baseball, matching Ty Cobb. García achieved his 50th career win in a 4–1 decision over the Pirates on September 5, also reaching 100 IP in a season for the first time since 2012. Totaling 20 regular season starts, he finished the season with 10–6 won–loss record, 2.43 ERA, and 1.046 walks plus hits per inning pitched (WHIP). The Cardinals won 10 of his 11 starts in August and September; and, at Busch Stadium, he turned in nine quality starts in 10 attempts, allowing a 1.70 ERA and 0.888 WHIP. The Cardinals won 100 games and the National League Central division title. He started Game 2 of the NLDS against the Cubs, but lasted just two innings as the Cardinals lost this game 6–3 before the Cubs eliminated the Cardinals. On October 31, 2015, the Cardinals announced they exercised García's team option for 2016 worth $11.5 million.