Geraint Thomas of Team Sky and Great Britain is the new leader of the Tour de France after yellow jersey wearer Greg Van Avermaet dropped out of contention.
Thomas started the day 2 minutes, 22 seconds behind Van Avermaet in the standings, but the Belgian rider, who had been leading the General Classification since Stage 3, was dropped by the peloton early on.
Team Sky set the pace as the peloton hit the final 17.6 kilometer climb to La Rosière and were able to catch yellow jersey contender Alejandro Valverde, who was part of the breakaway group, with 7 km to go.
Thomas broke from his Team Sky teammates with 5.5 km to go, with teammate and 2017 Tour de France winner Chris Froome following in pursuit.
Thomas then attacked again, blasting past yellow jersey contender Tom Dumoulin and then Mikel Nieve to win the stage and deliver a huge statement.
"It's unreal," Thomas said aftreward. "I didn't expect it at all. We were low on numbers. It was more instinct.
"I knew there was a good chance. To wear the yellow jersey is a massive honour, and to wear it three years in a row is pretty nice ... I rode really well."
The 109 km stage from Albertville to La Rosière Espace San Bernardo was the second stage of the tour to take place in the Alps, following yesterday's finish in Le Grand Bornand.
Van Avermaet impressed with his pace in the climbs during Tuesday's stage but was unable to repeat his performance. He is now 20 minutes behind Thomas.
Julian Alaphilippe won enough climbing points to retain the polka-dot jersey after leading at the top of the first climb of the day to Montée de Bisanne, but fell away on the second ascent to Col du Pré. Peter Sagan retained the green jersey after winning the intermediate sprint.
1. Geraint Thomas (GBR) Team Sky 3:29:36
2. Tom Dumoulin (NED) Team Sunweb +20
3. Chris Froome (GBR) Team Sky "
4. Damiano Caruso (ITA) BMC Racing Team +22
5. Mikel Nieve (ESP) Mitchelton - Scott "
1. Geraint Thomas (GBR) Team Sky 44:06:16
2. Chris Froome (GBR) Team Sky +1:25
3. Tom Dumoulin (NED) Team Sunweb +1:44
4. Vincenzo Nibali (ITA) Bahrain - Merida +2:14
5. Primož Roglic (SLO) Team LottoNL - Jumbo +2:23