Nach seinem Sturz am Vortag ging Alessandro Covi (UAE Team Emirates) nicht an den Start der 12. Etappe. Nach einer nervösen Startphase setzte sich eine Ausreißergruppe ab in der mit Patrick Konrad, Nico Denz (beide Bora-hansgrohe), Ilan Van Wilder (Soudal Quick-Step), Jonathan Lastra (Cofidis), Sepp Kuss, Michel Heßmann (beide Jumbo-Visma), Alessandro Tonelli (Green Project-Bardiani CSF-Faizanè), Einer Rubio (Movistar Team), Toms Skujiņš, Bauke Mollema, Amanuel Ghebreigzabhier, Mads Pedersen (alle vier von Trek-Segafredo), Marco Frigo, Sebastian Berwick, Stephen Williams (alle drei von Israel-Premier Tech), Laurens Huys (Intermarché-Circus-Wanty), Davide Formolo (UAE Team Emirates), Valentin Paret-Peintre, Alex Baudin (beide AG2R Citroën Team), Christian Scaroni, Wadim Pronski, Samuele Battistella (alle drei von Astana Qazaqstan Team), Andrea Pasqualon, Jasha Sütterlin (beide Bahrain Victorious), Alberto Bettiol (EF Education-EasyPost), Michael Matthews (Team Jayco AlUla) und Veljko Stojnić (Team Corratec-Selle Italia) 27 Fahrer vertreten waren. Unterdessen fielen Mikaël Chérel (AG2R Citroën) und Kaden Groves (Alpecin-Deceuninck) aus dem Peloton zurück und gaben das Rennen kurze Zeit später auf.
Nachdem sich die Spitzengruppe etabliert hatte griffen Stefano Oldani (Alpecin-Deceuninck), Davide Gabburo (Green Project-Bardiani CSF-Faizanè) und Jonathan Milan (Bahrain Victorious), der Führende der Punktewertung im Hauptfeld an. Kurz darauf lösten sich mit Lorenzo Fortunato (Eolo-Kometa Cycling Team) und Luca Covili (Green Project-Bardiani CSF-Faizanè) zwei weitere Fahrer, die wenig später zu den Verfolgern aufschlossen. Die Gruppe schloss nach der ersten Bergwertung nach rund 50 Kilometern zur Spitzengruppe auf, wobei Jonathan Milan den Sprung in die Gruppe als Einziger nicht schaffte und ins Peloton zurückfiel. Die Bergwertung in Pedaggera sicherte sich Nico Denz vor Amanuel Ghebreigzabhier und Wadim Pronski. Beim ersten Zwischensprint in Ceresole d’Alba setzte sich Mads Pedersen vor Michael Matthews durch, wodurch der Däne in der Punktwertung nur noch 24 Punkte hinter Jonathan Milan zurücklag.
Rund 100 Kilometer vor dem Ziel teilte sich die Spitzengruppe erneut und mit Alessandro Tonelli, Toms Skujiņš, Nico Denz, Sebastian Berwick und Samuele Battistella setzten sich fünf Fahrer ab. Kurz darauf musste Samuele Battistella die Spitzengruppe ziehen lassen, die innerhalb von wenigen Kilometern einen Vorsprung von zwei Minuten herausfuhr. Im Peloton kam es unterdessen zu einem Sturz in den auch Jack Haig (Bahrain Victorious) involviert war, der das Rennen jedoch fortsetzen konnte. Nachdem Toms Skujiņš sich die meisten Zeitbonifikationen beim zweiten Zwischensprint gesichert hatte, begann die Auffahrt des Colle Braida, dessen höchster Punkt rund 30 Kilometer vor dem Ziel erreicht wurde. Im Anstieg bildete sich ein Spitzen-Trio in dem Toms Skujiņš, Nico Denz und Sebastian Berwick vertreten waren. Toms Skujiņš führte über die Kuppe, ehe Nico Denz in einer kurzen Gegensteigung rund 12 Kilometer vor dem Ziel angriff. Der Deutsche konnte sich zwar kurzzeitig absetzen, wurde jedoch nach wenigen Kilometern von seinen Begleitern eingeholt. Das Trio erreichte die Zielgerade gemeinsam, auf der Nico Denz den Sprint eröffnete und sich souverän vor Toms Skujiņš und Sebastian Berwick durchsetzte. Für den Deutschen war es der erste Etappensieg bei einer Grand Tours. Mit einem Rückstand von acht Minuten und 19 Sekunden erreichten die Gesamtklassement-Fahrer das Ziel im Hauptfeld.
In der Gesamtwertung kam es zu keinen nennenswerten Veränderungen. Auch in den Sonderwertungen behielten João Almeida (UAE Team Emirates), Jonathan Milan und Davide Bais (Eolo-Kometa) das Weiße, Violette bzw. Blaue Trikot. In der Mannschaftswertung übernahm die Mannschaft Jumbo-Visma die Führung, da sie mit Sepp Kuss und Michel Heßmann zwei Fahrer in der Ausreißergruppe positioniert hatten. Neben Mikaël Chérel und Kaden Groves gab auch Harm Vanhoucke (Team DSM) das Rennen auf, womit noch 136 Fahrer in der Rundfahrt verblieben.[2][3]