Fernando Alonso led Felipe Massa in a Ferrari one-two at Hockenheim as the Italian team revitalised its season - but the win came amid controversy as Massa backed off to allow Alonso to pass him.
Poleman Sebastian Vettel was only third for Red Bull on home ground, ahead of the McLarens and Mark Webber.
Massa had gained the lead at the first corner, after both Ferraris made better starts than Vettel. The German focused on squeezing Alonso towards the pit wall, allowing Massa to sweep around the outside of both, with Vettel pushed back to third.
The trio ran in close company at first, before the Ferraris started dropping Vettel following the pitstops.
Alonso immediately seemed quicker on the harder tyres, closing right onto Massa's tail and drawing alongside on the backstraight as they lapped Bruno Senna and Timo Glock on lap 20.
But then Massa lifted his pace and started pulling away, setting several new fastest laps and opening up a 3.4-second lead.
It did not last though, as Alonso responded with some fastest laps of his own, getting the gap back down to under a second. On lap 47, Massa's engineer Rob Smedley told his driver that "Fernando is faster than you" and asked him to confirm he 'understood'. Next time around, Massa lifted off after the hairpin and Alonso accelerated past on the straight to take the race lead, denying Massa victory on the first anniversary of the horrific Hungaroring crash that ended his 2009 season.
Vettel occasionally trimmed the Ferraris' advantage, and a late push got him onto Massa's tail, but he was unable to pass.
The McLarens were never fast enough to fight for the podium and finished fourth and fifth, enough to keep them in the points lead. Lewis Hamilton managed to pass Webber on the first lap, with Button doing likewise by running through to lap 21 before his tyre stop. Webber then had to drop back from the McLarens to nurse his engine amid worryingly high oil consumption.
A lap down, Robert Kubica (Renault) beat the two Mercedes to seventh, with Nico Rosberg getting ahead of Michael Schumacher during the pit sequence after a good start from the elder German had earlier swapped their positions.
Renault got both cars in the points as Vitaly Petrov took 10th, while both Williams lost ground on the first lap and could not recover into the points, despite Nico Hulkenberg waiting until lap 34 before pitting.
Sauber's Pedro de la Rosa also tried a bold strategy, running the first 51 laps on one set of hard tyres before changing to softs, but his plan for a late charge was stymied when he hit Heikki Kovalainen's Lotus, breaking his front wing and taking the Finn out of the 'new teams' class' lead, as he had been just ahead of Timo Glock's Virgin up to then.
Other teams in trouble were Toro Rosso and Force India, who both saw both their cars damaged in first-lap incidents - in Toro Rosso's case after Jaime Alguersuari crashed into the back of Sebastien Buemi at the hairpin.
PROVISIONAL RACE RESULTS The German Grand Prix Hockenheim, Germany; 67 laps; 306.458km; Weather: Sunny. Classified: Pos Driver Team Time 1. Alonso Ferrari 1h28:38.866 2. Massa Ferrari + 4.196 3. Vettel Red Bull-Renault + 5.121 4. Hamilton McLaren-Mercedes + 26.896 5. Button McLaren-Mercedes + 29.482 6. Webber Red Bull-Renault + 43.606 7. Kubica Renault + 1 lap 8. Rosberg Mercedes + 1 lap 9. Schumacher Mercedes + 1 lap 10. Petrov Renault + 1 lap 11. Kobayashi Sauber-Ferrari + 1 lap 12. Barrichello Williams-Cosworth + 1 lap 13. Hulkenberg Williams-Cosworth + 1 lap 14. De la Rosa Sauber-Ferrari + 1 lap 15. Alguersuari Toro Rosso-Ferrari + 1 lap 16. Liuzzi Force India-Mercedes + 2 laps 17. Sutil Force India-Mercedes + 2 laps 18. Glock Virgin-Cosworth + 3 laps 19. Senna HRT-Cosworth + 4 laps Fastest lap: Vettel, 1:15.824 Not classified/retirements: Driver Team On lap Kovalainen Lotus-Cosworth 58 Di Grassi Virgin-Cosworth 51 Yamamoto HRT-Cosworth 20 Trulli Lotus-Cosworth 4 Buemi Toro Rosso-Ferrari 2 World Championship standings, round 11: Drivers: Constructors: 1. Hamilton 157 1. McLaren-Mercedes 300 2. Button 143 2. Red Bull-Renault 272 3. Webber 136 3. Ferrari 208 4. Vettel 136 4. Mercedes 132 5. Alonso 123 5. Renault 96 6. Rosberg 94 6. Force India-Mercedes 47 7. Kubica 89 7. Williams-Cosworth 31 8. Massa 85 8. Sauber-Ferrari 15 9. Schumacher 38 9. Toro Rosso-Ferrari 10 10. Sutil 35 11. Barrichello 29 12. Kobayashi 15 13. Liuzzi 12 14. Petrov 7 15. Buemi 7 16. Alguersuari 3 17. Hulkenberg 2 All timing unofficial