Bauke Mollema celebrates his first Tour win (LIONEL BONAVENTURE/AFP/Getty)
Follow the Tour with the Velon Live Cycling app
Dan Martin (Quick-Step Floors) grabbed a few precious seconds with a strong attack inside the final six kilometres, moving above Mikel Landa (Team Sky) to fifth in GC.
Stage 13 winner Warren Barguil (Team Sunweb) had looked strongest in the large breakaway that went away early, and extended his KOM competition lead to 78 points.
Tony Martin (Team Katusha Alpecin) soloed off the front - attacking with 68km left - but ran out of gas on the category-one Col de Peyra Taillade.
Mollema made the decisive move with 30km left, and despite the efforts of a powerful chasing group he stayed away to record his first Tour de France stage win by 19".
Mollema said: “It’s amazing, I’m so happy to finally win a stage in the Tour de France, I just can’t believe it you know, it’s finally what I’ve worked so hard for the last few years.
"I’ve been close a few times and this year I really wanted to go for a stage, that was a big goal for me, and yesterday I knew this was a chance."
Michael Matthews (Team Sunweb) produced another excellent ride to narrow Marcel Kittel's lead in the points classification - the Australian has 294 points to 373 for the Quick-Step Floors rider. Simon Yates (ORICA-SCOTT) leads the best young rider classification.
Stage 15 result: Top 10
1 Bauke Mollema (Ned) Trek-Segafredo 4h41'47"
2 Diego Ulissi (Ita) UAE Team Emirates +19"
3 Tony Gallopin (Fra) Lotto Soudal
4 Primoz Roglic (Slo) Team LottoNl-Jumbo
5 Warren Barguil (Fra) Team Sunweb +23"
6 Nicolas Roche (Irl) BMC Racing Team +1'00"
7 Lilian Calmejane (Fra) Direct Energie 1'04"
8 Jan Bakelants (Bel) AG2R La Mondiale
9 Thibaut Pinot (Fra) FDJ
10 Serge Pauwels (Bel) Dimension Data
Top 10 GC after Stage 15
1 Christopher Froome (GBr) Team Sky 64h40'21"
2 Fabio Aru (Ita) Astana Pro Team +18"
3 Romain Bardet (Fra) AG2R La Mondiale +23"
4 Rigoberto Uran (Col) Cannondale-Drapac +29"
5 Daniel Martin (Irl) Quick-Step Floors +1'12"
6 Mikel Landa (Spa) Team Sky +1'17"
7 Simon Yates (GBr) Orica-Scott +2'02"
8 Louis Meintjes (RSA) UAE Team Emirates +5'09"
9 Alberto Contador (Spa) Trek-Segafredo +5'37"
10 Damiano Caruso (Ita) BMC Racing Team +6'05"