Eric Thames homered and drove in three runs, Matt Garza pitched five innings in his first start after a short stint on the disabled list, and the Brewers held on to beat the St. Louis Cardinals 7-6.
Eric Sogard added a two-run double to lead a four-run second inning as Milwaukee improved to 18-13 on the road.
Thames came into the contest in a 1-for-15 skid. He was hitting just .108 in June and posted a .221 mark in May.
Aledmys Diaz hit a two-run homer for the Cardinals, who nearly recovered after falling behind 6-0. St. Louis has lost two in a row after winning four straight.
Closer Corey Knebel came on with two outs in the top of the eighth after a one-hour rain delay and got the last four outs for his 10th save in 13 chances.
Thames ripped a two-run homer in the first and an RBI double in the second against starter Mike Leake (5-6).
Garza (3-2) allowed four runs and five hits. He suffered a chest contusion while running into teammate Jesus Aguilar on June 3 and missed one start.
Milwaukee tallied six runs on six hits over the first two innings against Leake, who dropped his fourth successive decision. Leake bounced back with four scoreless innings after the rough start.
Zach Davies (7-3, 4.74) will start in the final game of the four-game series on Thursday. Davies is 2-0 with a 2.81 ERA in five career starts against St. Louis.
Michael Wacha (3-3, 4.50) will start for the Cardinals in the finale game of a seven-game homestand. Wacha has gone six innings or more in eight of 11 starts this season. He has a 4-0 career mark against the Brewers.