The champion in waiting said he was so nervous on the climb he counted down the kilometres on the way up as defending champion Welshman Geraint Thomas ended the day in second overall, with Dutch rider Steven Kruijswijk in third.
The stage itself was won by 2014 winner Vincenzo Nibali who broke from the main contenders late in the final climb to win by 17sec at the line where he raised his finger to his lips, kissed it and raised it to the sky.
"I still have to get Paris but it's incredible," said the rider who is set to become the Tour's youngest winner since Francois Faber in 1909.
"I'm a little calmer now," added the modest Colombian.
"It'll take a few days to realise what I have achieved.
"To be honest I was feeling good today, I kept thinking 5km, 4km, 3km one less, one less to go each time.
"When we got to the finish and Geraint held out his hand I realised it was over and I was going to win the Tour de France."
Bernal and Thomas, co-captains at Team Ineos, crossed the winning line a few seconds ahead of their key rivals and smiled broadly at each other as they held hands in unity to mark the moment.
Ineos principal Dave Brailsford appears to have masterminded seven tour wins from the last eight editions with Bradley Wiggins, Chris Froome and Thomas having taken six and Bernal within a parade of the latest triumph.
Frenchman Julian Alaphilippe, who led for 14 days before cracking on Friday's weather neutralised stage finished down the field to drop to fifth place overall.
Bernal, who is set to become Colombia's first Tour winner, now leads Thomas by 1min 11sec and Jumbo-Visma's Kruijswijk by 1min 31sec ahead of the processionary day of racing ending in the French capital.
Nibali, who won in 2014, came second on this year's Giro d'Italia and while he looked wiped out early in the Tour was radiant when picking up a stage win late in the game.
"To win here is a great joy," said Bahrain Merida's Italian captain.
Saturday's race embarked in cool conditions in 12 Celsius (53.6 Fahrenheit) atop the Val Thorens ski resort at 2,356m altitude.
Green jersey wearer Peter Sagan said he was delighted the race had been shortened today.
"Tomorrow is Paris and one for the sprinters, so let's see, a win in Paris would be great," said the Slovak gunning for the sprinter's jersey for a record seventh time.
"It's been a beautiful Tour," he said.
Frenchman Romain Bardet redeemed what had looked like a disastrous three weeks for him by rallying to win the 'King of the Mountains' polka dot jersey with two fine performances in th Alps.
Sunday's final parade to Paris embarks late and is due to finish beneath the Arc de Triomphe.
Tour de France stage 20 results after the run from Albertville to Val Thorens:
1. Vincenzo Nibali (ITA/BAH) in 1 h 51:53, 2. Alejandro Valverde (ESP/MOV) at 10, 3. Mikel Landa (ESP/MOV) 14, 4. Egan Bernal (COL/INE) 17, 5. Geraint Thomas (GBR/INE) 17, 6. Rigoberto Uran (COL/EF1) 23, 7. Emanuel Buchmann (GER/BOR) 23, 8. Steven Kruijswijk (NED/JUM) 25, 9. Wouter Poels (NED/INE) 30, 10. Nairo Quintana (COL/MOV) 30, 11. Warren Barguil (FRA/ARK) 46, 12. Gregor Muehlberger (AUT/BOR) 1:09, 13. Lennard Kämna (GER/SUN) 1:30, 14. Marc Soler (ESP/MOV) 1:33, 15. Adam Yates (GBR/MIT) 1:49, 16. Simon Yates (GBR/MIT) 1:52, 17. Ilnur Zakarin (RUS/KAT) 1:56, 18. Elie Gesbert (FRA/ARK) 2:07, 19. Daniel Martin (IRL/UAE) 2:10, 20. Daryl Impey (RSA/MIT) 2:10.
26. Julian Alaphilippe (FRA/DEC) 3:17, 27. Romain Bardet (FRA/ALM) 3:45, 38. Richie Porte (AUS/TRE) 5:54, 97. Peter Sagan (SVK/BOR) 15:52, 114. Edvald Boasson Hagen (NOR/DDT) 17:54, 132. Caleb Ewan (AUS/LOT) 18:38.
Tour de France overall standings after stage 20 from Albertville to Val Thorens on Saturday:
1. Egan Bernal (COL/Ineos) 79hr 52min 52sec, 2. Geraint Thomas (GBR/INE) at 1:11, 3. Steven Kruijswijk (NED/JUM) 1:31, 4. Emanuel Buchmann (GER/BOR) 1:56, 5. Julian Alaphilippe (FRA/DEC) 3:45, 6. Mikel Landa (ESP/MOV) 4:23, 7. Rigoberto Uran (COL/EF1) 5:15, 8. Nairo Quintana (COL/MOV) 5:30, 9. Alejandro Valverde (ESP/MOV) 6:12. 10. Warren Barguil (FRA/ARK) 7:32, 11. Richie Porte (AUS/TRE) 12:05, 12. Guillaume Martin (FRA/WGG) 22:08, 13. David Gaudu (FRA/FDJ) 23:29, 14. Fabio Aru (ITA/UAE) 27:07, 15. Romain Bardet (FRA/ALM) 29:54, 16. Roman Kreuziger (CZE/DDT) 35:49, 17. Sebastien Reichenbach (SUI/FDJ) 43:41, 18. Daniel Martin (IRL/UAE) 44:30, 19. Alexey Lutsenko (KAZ/AST) 48:32, 20. Jose Herrada Lopez (ESP/COF) 51:16
28. Bauke Mollema (NED/TRE) 1.13:16, 29. Adam Yates (GBR/MIT) 1.16:09, 36. Greg Van Avermaet (BEL/CCC) 1.27:11, 39. Vincenzo Nibali (ITA/BAH) 1.36:21, 49. Simon Yates (GBR/MIT) 1.53:03, 60. Thomas De Gendt (BEL/LOT) 2.10:04, 83. Peter Sagan (SVK/BOR) 2.44:24, 155. Sebastian Langeveld (NED/EF1) 4.34:23.