Gonzalez, who moved into sole possession for second in wins among National League pitchers, worked five innings while striking out four.
Ryan Zimmerman drove in four for Washington, which is now 6-2 against its division foe this season, and 5-1 in Atlanta.
Gonzalez handled the Braves' lineup with relative ease through the first five, before running into trouble in the sixth. Beginning the inning with 98 pitches, he walked the first two batters before surrendering a long three-run home run to Freddie Freeman, cutting Washington's lead to 6-4. Gonzalez was replaced by reliever Craig Stammen immediately thereafter.
"Gio pitched a gutty game -- it was awfully hot out there -- but going out in the sixth inning, I had Stammen warming up, and Gio said he was fine and wanted go back out there," manager Davey Johnson said. "I was going to go pitch by pitch with him. Everybody said he was feeling good. Then when he walked the first batter, it was my instinct to take him out, and I did not."
Johnson was relieved afterward that he didn't have to take the fall for a blown victory. He has his bullpen -- Stammen, Sean Burnett and Tyler Clippard combined for four innings of shutout ball -- partly to thank.
"I was just trying to attack the zone," Gonzalez said. "I was dropping a little bit, arm slot. Again, the bullpen came in and cleaned up my mess. They did a great job. I can't do anything about it except tip my hat and say, 'Thank you so much,' and hopefully we'll get them a little gift."
The Nationals had gained the early lead by jumping on Atlanta starter Tim Hudson immediately in the top of the first, tallying hits in their first three at-bats of the game. Steve Lombardozzi doubled, Harper singled and Zimmerman doubled, driving in the first two. Zimmerman came around to score on Adam LaRoche's sac fly, and Desmond also scored after Rick Ankiel's single to center led to an error by Michael Bourn, making it 4-0.
The four-run first matched the largest scoring output in a first inning for the Nationals this year, the most since they also scored four on May 25 in Atlanta.
Atlanta's only other run came in the third, when Jason Heyward singled with one out and scored when Chipper Jones doubled in the following at-bat.
Zimmerman, 3-for-5 on the day, helped the Nationals extend their lead with a solo home run deep into the left-field bleachers in the fifth, and also with an insurance RBI in the ninth on a single.
In his last eight games, Zimmerman is hitting .389 (14-for-36) with four doubles, three home runs and 13 RBIs. He has recorded a multihit game in five of his last eight games.
"I'm starting to feel better," Zimmerman said. "I'm feeling healthier. Obviously, the last few days, the confidence has been growing a little bit. Just got to keep that momentum going and keep working hard."
Hudson logged six innings, surrendering eight hits and all six runs (five earned) while striking out four and walking two in the loss.
Washington ended a 10-game road trip at an even 5-5, but outscored opponents by 13 runs in those contests. They'll get a day off Monday before two series against NL West opponents (San Francisco and Colorado) this week heading into the All-Star break.