Ineos’s Bernal, who came fourth alongside last year’s winner Geraint Thomas in today’s 59km stage from Albertville to Val Thorens, leads the overall standings in 79:52:52.
The 22-year-old holds a lead of one minute and 11 seconds over teammate Thomas, while Jumbo-Visma’s Steven Kruijswijk, who moved into third, is a further 20 seconds back.
“It’ll need some time to sink in and for me to realise what’s happening,” said Bernal.
He added that tomorrow’s finish in Paris would be something special and would be amazing for the Colombian people.
Frenchman Julian Alaphilippe, who wore the yellow jersey for most of the Tour, lost over three minutes after he was dropped by the peloton on the climb with only 13km to the finish.
The Deceuninck-QuickStep star had to settle for fifth on the GC as Bora-Hansgrohe’s Emanuel Buchmann moved up to fourth (+0:01:56).
Italian Vincenzo Nibali put in a strong effort to win the stage in 1:51:53.
The Bahrain-Merida rider broke away from a group of four, which included Russian Zakarin Ilnur, Canadian Michael Woods and Frenchman Gallopin Tony, with just over 12km remaining and had a solo ride home.
“I suffered but it’s great to win,” said Nibali.
“It wasn’t easy for me after the fatigue of the Giro d’Italia. I tried to do the GC but exploded.”
He added that he thought about abandoning the Tour after receiving a lot of criticism but instead fought on to honour the Tour de France.
Tomorrow’s final stage will cover 128km of cycling from Rambouillet to the Champs-Elysees in Paris.
View stage 20’s results here.