Lars Stindl rescued a draw in stoppage time to extend Germany's unbeaten run to 21 matches as the world champions twice came from behind to earn a 2-2 draw with France in Cologne.
Stindl, an 83rd-minute replacement for Emre Can ensured Joachim Low's finished 2017 without tasting a single defeat, their last loss coming at the hands of France in the European Championship semi-finals last year.
That run looked like coming to an end when Alexandre Lacazette netted twice on Tuesday – the Arsenal striker profiting from Anthony Martial's brilliant footwork for his first before Kylian Mbappe created his second.
In between the Arsenal striker's brace Timo Werner levelled for the hosts as he broke the French offside trap to sweep home Mesut Ozil's pass.
But a second goal looked too much for the hosts as the game entered stoppage time, however substitute Stindl had other ideas as he fired low past Steve Mandanda just 10 minutes after coming on.
Low will hope to see better defending when his side face Spain and Brazil before they begin their World Cup defence in Russia, but their battling spirit will give the coach plenty of encouragement.
A Germany side showing six changes from their draw with England took time to settle and that allowed France to have the better of the opening exchanges, although they initially failed to stretch Kevin Trapp.
Mbappe may well have done when he found space in the 12th minute, but Mats Hummels came to Germany's rescue with a perfectly executed sliding tackle.
Lacazette – preferred in attack to Antoine Griezmann – eventually tested Trapp just before the half-hour mark, while at the other end an important block from Raphael Varane denied Ozil.
Minutes later Trapp had to be alert again to keep Mbappe out low to his right, the Paris-Saint Germain goalkeeper denying his club-mate after a neat Cruyff turn in the penalty area.
Finally, in the 33rd minute, the goal France's pressure deserved came, Martial dancing past Niklas Sule before touching the ball wide of Trapp for Lacazette to apply a simple finish.
Sacre bleu! Nothing Trapp can do this time, as Martial goes full FIFA to give Lacazette a tap-in (33') #GERFRA 0-1— Germany (@DFB_Team_EN) November 14, 2017
Half-time substitute Antonio Rudiger should have brought Germany level seven minutes after his introduction, but the Chelsea defender skewed his effort wide after great work down the left from Julian Draxler.
Germany did not have to wait long for their equaliser as Ozil led a swift counter-attack, his pinpoint throughball releasing Werner and the RB Leipzig forward calmly slotted under Mandanda.
Almost immediately Martial thought he had restored France's lead, but Trapp got down brilliantly to push away his dipping strike.
A Kroos free-kick rattled Mandanda's bar with 20 minutes to play but while the Real Madrid midfielder was wondering how it stayed out, France scored.
Rudiger inexplicably left Lacazette in acres of space 20 yards from goal and the 26-year-old beat Trapp again after being found by Mbappe's pass.
Low introduced Mario Gotze for his first international appearance in just shy of a year and he came good with a superb assist for Stindl, who kept their run going by sliding home a neat 93rd-minute finish.
|Great Britain and Argentina handed Davis Cup wildcards|
|Strong start key for European skipper Bjorn|
|Schmiedlova ousts former Tashkent champion Hibino|
|Mourinho and Pogba in frosty training ground exchange|
|Ashworth to leave FA for Brighton job|
|Gillespie backs Finch for Test success|
|Woods and Mickelson pairing ´not too likely´ - Furyk|
|Pogba v Mourinho: Who should stay and who should go at Manchester United?|
|Rahm better than I was at my first Ryder Cup, says McIlroy|
|Erdogan claims double standards in Ozil controversy|
|F1 Raceweek: Mercedes eye five in a row in Sochi – Russian GP in numbers|
|Rose: Stature doesn´t win Ryder Cup points|
|Sonny Bill Williams fit to face Pumas - Crotty|
|Exuberant Rahm expecting to be paired with calming influence|
|I´ve proved myself over and over - Garcia|
|Ocon negotiating with Williams for 2019|
|Kvitova´s Wuhan quest ended by Pavlyuchenkova|
|Hummels impressed by ´incredible´ Sanches|
|Brewers benefit from Pirates´ trade deadline acquisition of Archer|
|Barty upsets Kerber in Wuhan|
|England could still pick Cipriani despite training camp snub|
|Astros become first defending champions to reach 100 wins since 1990 Athletics|
|Wilder waiting for ´real offer´ to fight Joshua|
|LeBron focusing on patience after first Lakers practice|
|Pochettino expects Spurs in new stadium by Christmas|
|Inzaghi: With Ronaldo, Juve are best team in Europe|
|Some people talk too much – Icardi hits back at critics|
|Kovac, Robben praise Augsburg after draw|
|Angels star Ohtani to undergo Tommy John surgery|
|Simeone tips Gimenez to be fit for Madrid derby|
|Smith on his NBA Finals miscue: People make mistakes all the time|
|Rams CB Talib to have ankle surgery|
|Cousins ´feeling a lot better´, still unsure when he´ll return|
|I knew we´d be in trouble with Jones on penalties – Mourinho|
|Coyotes forward Galchenyuk expected to miss opener|
|Guardiola won´t compare Foden to Iniesta|
|Lampard shell-shocked as Derby win at Old Trafford|
|Ryder Cup 2018: USA celebrities take the honours|
|Manchester United´s torrid penalty shoot-out run continues against Derby|
|Guardiola: Foden already a great, great player|
|Atletico Madrid 3 Huesca 0: Rojiblancos cruise ahead of Madrid derby|
|EFL Cup: Lampard dumps out Mourinho, Burnley lose at Burton Albion|
|Mourinho denies Pogba row despite stripping midfielder of vice-captaincy|
|Fabinho situation not complicated, insists Klopp|
|Manchester United 2 Derby County 2 (Derby win 8-7 on pens): Lampard heaps pressure on Mourinho|
|Afghanistan snatch tie after Shahzad pummels India|
|Inter 2 Fiorentina 1: D´Ambrosio maintains Nerazzurri revival|
|Oxford United 0 Manchester City 3: Foden stars as EFL Cup holders cruise into round four|
|Cousin takes Gabon post after Aubameyang rejection|
|Bayern Munich 1 Augsburg 1: Neuer error costs champions|
|Paris Saint-Germain must be a Champions League force to help Neymar - Baptista|
|Salgado warns of ´war´ in Spanish football|
|Cech deserves Arsenal place, says Seaman|
|Halep and Garcia among seeds to fall in Wuhan|
|F1 Raceweek: Mercedes taking no comfort in points advantage|
|Benitez charged by FA for referee comment relating to Zaha treatment|
|Cibulkova dumps out hampered Halep in Wuhan|
|Mourinho questions his players amid reports Pogba won´t captain United again|
|European Ryder Cup diary: Fleetwood´s hair delights Poulter|
|USA Ryder Cup diary: Tiger´s roaring reception, McEnroe´s bold prediction|
|Loans to be limited under new FIFA proposal|
|Prolific Nadolo signs new Montpellier contract|
|Modric? For us, Messi is the best – Valverde|
|Murray makes winning start in Shenzhen|
|Mickelson would cherish first victory on European soil|
|Hodge hoping pressure proves too much for South Africa|
|Woodward in show of support for under-fire Mourinho|
|Mickelson jokes he wants ´a shot a side´ from Tiger in Thanksgiving showdown|
|Reed: Captain America is a villain in Europe|
|Duminy to captain Proteas as Elgar replaces injured Amla|