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.
|Steelers OT Gilbert handed four-game PED suspension|
|Prior hits back at ´ridiculous´ claims as Lyon hopes Australia end careers|
|Dolphins QB Cutler placed in concussion protocol|
|Navratilova leads tributes to ´amazing´ Novotna after her death at 49|
|Brighton and Hove Albion 2 Stoke City 2: Gross, Izquierdo extend home unbeaten run|
|Dimitrov braced for Australian Open expectations|
|Broncos fire offensive coordinator Mike McCoy|
|England won´t suffer Gabba ambush, Malan claims|
|Rose in contention to face Dortmund as Pochettino denies ´issue´ with defender|
|Benzema knows he can give more – Zidane|
|I´ve fulfilled my dreams already – Klopp has no plans to coach Barcelona|
|Memorable Ashes Moments: Unlikely saviour Agar falls agonisingly short|
|Wallabies coach Cheika faces investigation|
|The Ashes: Australia squad profiles|
|Aubameyang will face Tottenham, Bosz confirms|
|Klopp expects Matip to face Chelsea, Lallana return getting ´nearer´|
|Brown could return for England, Underhill out|
|Haye´s rematch with Bellew off due to bicep tear|
|The Ashes: England squad profiles|
|Gatland vows not to rise to New Zealand media barbs|
|Berizzo looking to former Red Aspas to provide lessons for Sevilla|
|Mangala ready to pounce, but realistic on Man City playing time|
|The Ashes: How the urn will be won - the case for Australia and England|
|Innovation key as WTA Media embraces evolving viewing habits|
|Trump calls for Lynch to be suspended as anthem row returns|
|Mendy injury means Aguero or Jesus for Guardiola|
|Kohli proud of India after almost snatching Kolkata win|
|The Ashes: Key contests in the battle for the urn|
|Guardiola sends ´big hug´ to ´amazing, so gentle´ Pulis|
|Tavecchio quits as head of FIGC, claims board have refused to resign|
|Benedetto facing Argentina World Cup KO with cruciate injury|
|Hansen hails All Blacks progress|
|Kohli´s record century precedes Bhuvneshwar heroics, but Sri Lanka cling on|
|Shape up! Heynckes reveals demand to Bayern star Vidal|
|Australia hope to open England ´scars´ in Brisbane|
|Smiling Broad sports bruise after golfing mishap|
|Ramos sits out Madrid trip to APOEL|
|West Brom sack Pulis after wretched run|
|Ball fighting fit ahead of Ashes opener at the Gabba|
|Murray should appoint Delgado as Lendl replacement - Henman|
|Former Wimbledon champion Novotna dies aged 49|
|Lloris wants Spurs to forget title and focus on top four|
|Pogba no Gerrard yet, says Benitez|
|Pearce released from Roosters contract|
|Expect to get six ducks – Paine reveals Rogers´ Ashes advice|
|Lyon: I don´t care if Stokes plays Ashes|
|Curry´s offensive explosion leads Warriors past Nets|
|Ball records second triple-double to join Magic, West in record books|
|Patriots, Ravens win among multiple blowouts|
|Flyers´ Gudas suspended for 10 games for violent slash|
|Two-time NBA All-Star David Lee announces retirement|
|Guardiola will ´kill´ City stars if they get complacent|
|Bills coach McDermott to ´evaluate´ quarterback position|
|LeBron on Kaepernick controversy: I don´t respect the NFL|
|Ibrahimovic: My injury was worse than people know|
|Russell to leave Warriors at end of season|
|Cook cruises to first PGA Tour win|
|Truex wins first NASCAR championship|
|Cardinals´ Fitzgerald now fifth all-time in receiving yards|
|Icardi like a ´raptor pouncing on its prey´, says Spalletti|
|Tired Goffin insists: ´I will be ready for Davis Cup final´|
|In-form Chelsea have regained hunger - Conte|
|Stones can bounce back stronger - Kompany|
|Guardiola ready to risk Kompany for Man City after Stones´ injury|
|City style suits me and thrills neutrals, says De Bruyne|
|Dimitrov thanks Scherzinger for giving him the X Factor at ATP Finals|
|Inter 2 Atalanta 0: Icardi brace sends Spalletti´s side second|
|Giampaolo promises more from ´extraordinary´ Sampdoria|
|Dimitrov overcomes gutsy Goffin to win ATP Finals|
|Memorable Ashes Moments: Australia skittled for 98 at MCG|