The Braves seldom have been happier to celebrate a walk-off win than Saturday, when B.J. Upton shook off his season-long woes and delivered in the 10th inning.

Upton hit a broken-bat single to right field with one out, scoring pinch-runner Jordan Schafer from second to give the Braves a thrilling 2-1 win before a boisterous crowd of 46,910 at Turner Field.

“Most importantly, we got a win,” Upton said. “We’ve had a couple of guys get big hits for us this year. I’m just glad that I was the one tonight.”

Upton, who came in batting a majors-worst .145, had two of the Braves’ five hits including a single in the third inning when they scored their first run.

“That’s big,” Braves manager Fredi Gonzalez said of the center fielder’s performance. “I thought he had good at-bats the whole game. That’s good for a guy who’s been getting beat up the last few weeks. This is good for him, especially at home to get the crowd behind him, and hopefully that catapults him for two or three months.”

Tim Hudson righted his own recently listing ship by pitching 7-1/3 innings of three-hit ball with only one unearned run, and the Braves veteran couldn’t have cared less about not getting a decision in the dramatic win.

“Man, it was a great game,” Hudson said. “It was fun. Awesome. B.J. came up with a huge hit right there. I know it’s something that he’s really proud of, and so are we. It was a big win for us. This is a game that you look back in September and think, man, if we could have just squeaked out that one-run game right there. And we were able to do it.”

Evan Gattis ranks among league leaders with 12 homers and six game-winning RBIs, and Nationals reliever Henry Rodriguez walked him on four pitches to start the 10th inning. Ramiro Pena then popped out foul on a bunt before Schafer stole second with Dan Uggla batting.

Uggla worked the count full and walked to bring up Upton, and the big crowd chanted, “B.J.!, B.J.!” a far different reaction than the boos he heard earlier Saturday and in recent weeks.

“That’s pretty cool,” Upton said of the reaction. “At that point you’ve got to try to block it out and focus on the at-bat. That’s what I did. Got a decent pitch and was just praying that it fell.”

After taking a first-pitch ball, Upton hit a 101-mph fastball for an opposite-field single to shallow right, and the Braves tumbled out of the dugout and raced to the infield to mob him after Schafer slid home just ahead of the tag.

“It was a little crazy, man,” Upton said of being the center of a walk-off celebration for the first time as a Brave. “We’ve got a crazy bunch of guys. But overall it was pretty fun.”

Braves closer Craig Kimbrel worked out of a severe jam in the ninth inning, when the Nationals had two runners in scoring position with none out after Ryan Zimmerman’s broken-bat flare single and Adam LaRoche’s double.

With no wiggle room to speak of, Kimbrel struck out Ian Desmond and got Roger Bernadina on a fielder’s-choice grounder to third baseman Chris Johnson, who fielded the one-hopper and made a good throw to the plate for the out.

The big crowd roared, and the decibel level rose yet again when Danny Espinosa flied out to end the inning.

Reed Johnson led off the Braves’ ninth with a pinch-hit single, but Justin Upton’s recent struggles continued as he struck out for the second time on an 0-for-4 night. Freddie Freeman then lined out to second base, and Johnson was doubled off first to end the inning.

The Braves got the bounce-back performance they hoped for from Hudson, who allowed three hits and one walk with four strikeouts. He got no decision while lowering his ERA to 0.84 in three starts against the Nationals this season.

Hudson had been 0-3 with an 8.69 ERA in his past four starts, lasting five innings or fewer in three. But the 37-year-old pitcher had started only once at home since May 5, and he’s been a far better pitcher this season at Turner Field.

The right-hander is 3-0 with a 2.39 ERA in six home starts, compared with 1-4 with a 7.67 ERA in six road starts. He hasn’t allowed more than three earned runs in any home start, and has worked 6 2/3 innings or more in four of six.

After giving up six runs in six innings of a loss at Toronto on Monday, Hudson said his recent struggles stemmed from a flaw in his delivery — he was collapsing on his push-off leg — that was fixable and that he planned to address in the bullpen between starts.

Apparently, he and pitching coach Roger McDowell worked it out, for it was vintage Hudson on Saturday. The sinkerballer got no decision, remaining 16-5 against the Nationals while lowering his ERA to 2.47 in 29 starts against them, including 2-0 this season.

“Roger and I did some pretty good work in my bullpen session between starts,” Hudson said, “and I think it was evident tonight in how I was throwing the ball and the quality of my pitches.

Gonzalez had Hudson’s back in the fourth inning, when the manager was ejected for arguing balls and strikes with Zimmerman at the plate and the Braves ahead 1-0. Gonzalez was tossed soon after Freeman’s throwing error allowed Steve Lombardozzi to reach first base to start the inning.

After ground outs by Zimmerman and LaRoche, Desmond singled to bring in the tying run, only the second hit off Hudson. He retired the first eight batters before pitcher Gio Gonzalez’s two-out infield single in the third.

Gio Gonzalez had been 0-2 with a 12.00 ERA in two starts this season against the Braves, and 3-1 with a 2.59 ERA in nine starts against everyone else. On Saturday, he pitched a lot more like he does against most everyone else.

Gonzalez allowed three hits, one run and one walk with seven strikeouts in seven innings, snapping a string of five starts against the Braves in which he lasted five innings or fewer.

The left-hander, who lost three consecutive starts against the Braves and was 2-4 with a 6.75 ERA in six career starts against them before Saturday, came out as if determined to prove something. He allowed only one hit and one walk through four innings, and worked out of a jam after Chris Johnson’s leadoff double in the fifth.

With the score 1-all, the Braves failed to capitalize after Johnson drove an opposite-field double to the right-field corner. Dan Uggla followed with a fly to deep center to advance Johnson to third, but still-slumping B.J. Upton popped out to short and Hudson grounded out to end the inning.

Upton, back in the lineup for only the second time in six games, was booed by many after failing to get the runner in.

Situational hitting has not been a strength of the boom-or-whiff Braves lineup, and they wasted another chance to take the lead in the sixth. After Andrelton Simmons led off the inning with a single, Jason Heyward struck out, Justin Upton flied out to left, and Freddie Freeman grounded out.

Heyward struck out in all three plate appearances and is batting .142 this season, including 1-for-25 with 10 strikeouts in his past eight games. Reed Johnson pinch-hit for him in the ninth against lefty reliever Fernando Abad.

In the third inning, Upton had a brief respite from the boos he’s heard recently. After Uggla drew a leadoff walk – the first Braves baserunner of the night – Upton chopped a single up the middle off the pitcher’s glove. There were cheers for Upton and runners on the corners with none out for the Braves.

After a Hudson sacrifice bunt, Simmons drove in a run with a groundout for a 1-0 Braves lead. They entered Saturday with a 22-3 record in games when they scored first.