France boss Didier Deschamps stuck with 10 of the players who started their final triumph against Croatia at Russia 2018, with an injury to captain and goalkeeper Hugo Lloris enforcing his only change.
Deputy Alphonse Areola impressed on his debut with a string of late saves.
It showed Germany belatedly shifting into gear after a forgettable opening hour, but it will take more than this for Joachim Low's men to shift the gloom that lingered after their group-stage exit and Mesut Ozil's international retirement.
France right-back Benjamin Pavard was left with stud marks down his neck after Antonio Rudiger clumsily but unintentionally trod on him, while Joshua Kimmich took an arm to the face from Blaise Matuidi during a robust opening.
N'Golo Kante's searching ball from the left saw Olivier Giroud draw a plunging save from Manuel Neuer and France's Chelsea striker just failed to turn in a cutback from the lively Kylian Mbappe in first-half stoppage time.
Antoine Griezmann engineered space in the Germany area but Neuer grasped his eventual shot at the second attempt.
The Bayern Munich goalkeeper was more impressive when Griezmann tried his luck from distance in the 64th-minute before opposite number Areola did brilliantly to tip Marco Reus' curling shot behind.
Areola kept out a stinging Mats Hummels strike after Thomas Muller inexplicably opted to chest rather than head his Bayern colleague's cross.
An overhit Muller centre almost caught out Areola and the PSG goalkeeper's best moment came from the resulting corner, denying Matthias Ginter with a superb reaction save.
Kante's heavy touch late on in his own box almost cost the world champions, but he recovered to block from substitute Ilkay Gundogan and preserve the stalemate.
What it means: Work to do for reworked Germany
A buoyant Munich crowd did their bit to sweep away the memory of recent trials, but a Germany geared towards getting the ball forward more quickly than in their sterile World Cup exit lacked fluency until the later stages. France, as was generally the case in Russia, looked like a side with plenty more in the tank as Mbappe played to the galleries, backheeling and flicking his way through a drab contest.
Pat on the back: Areola steps up for impressive debut
Areola enjoyed the unusual quirk of claiming his first full international cap two months on from collecting a World Cup winners' medal as an unused substitute. The 25-year-old had barely anything to do for the first hour but showed why he is consigning Gianluigi Buffon to the bench in Paris at present. His save from Ginter was magnificent.
Boot up the backside: Muller's best a fading memory
As Germany's performance reached a crescendo and Areola impressed, there was the all-too familiar sight of Muller flailing in good positions. Once Die Mannschaft's sure thing, the 28-year-old is five games without a goal for his country on the other side of a barren World Cup.
France remain in Nations League action when they entertain Netherlands on Sunday, while Germany welcome Peru to the Rhein-Neckar-Arena for a friendly.