In front of a crowd of nearly 45,000 people in London, England sealed their passage thanks to a 75th-minute strike from Raheem Sterling and a goal four minutes from time by Harry Kane.
After a largely uneventful and even first 60 minutes, Gareth Southgate’s men became more offensive by introducing creative midfielder Jack Grealish – and it was the Aston Villa man who made an impact, sliding in Luke Shaw down the left-hand side. His low cross found Sterling inside the penalty box and he finished past Germany goalkeeper Manuel Neuer.
The Germans tried to find an equaliser and the closest they came was ten minutes before the end when Thomas Muller was set free by Kai Havertz, but usually lethal forward fired wide with the goal at his mercy.
England made the Germans pay for that on the counter-attack as Joachim Low’s men drove forward in search of an equaliser. Grealish again was at the heart of it, clipping the ball into the box for Kane to head home from close range on 86 minutes.
The result partly avenges England’s defeat by Germany in Euro 96 at Wembley, when Southgate missed a penalty in a shoot-out and Berti Vogts men went on to defeat Czech Republic and lift the trophy.
England now await the winner of Sweden against Ukraine at Hampden later tonight. Their last-eight tie is due to take place on Saturday evening at the Stadio Olimpico in Rome (8pm).