Przebieg bitwy Francuzi przeprowadzili trzy ataki – jeden pozorowany i dwa prawdziwe. Schérer wysłał Augereau i prawe skrzydło na Borghetto Santo Spirito, aby otoczyć lewą flankę armii koalicji. W międzyczasie Sérurier i lewe skrzydło przy Ormea powstrzymywało wroga przed przesunięciem z niego sił. 22 listopada Massena wysłał dwie dywizje z Zuccarello, aby zaatakować centrum wroga. Z samego rana przed atakiem wygłosił krótką mowę, aby podnieść morale swoich wojsk, mówiąc, że zwycięstwo leży w ich bagnetach.
Masséna zdobył w tym natarciu wszystkie pozycje wroga aż do Bardineto. Dopiero tam Austriacy zorganizowali zacięty opór, który zmusił go do wprowadzenia odwodów i walka rozgorzała na nowo. Charlet zaatakował pierwszy okopy wroga, ale otrzymał śmiertelną ranę. Jego śmierć doprowadziła oddziały francuskie do furii i kolejne fale piechoty ruszyły do natarcia na bagnety, doprowadzając do ucieczki wroga.