Po przekroczeniu Alp Napoleon nie ruszył na odsiecz obleganej przez Austriaków Genui, a skierował się na wschód, by przeciąć austriackie linie komunikacyjne i odciąć nieprzyjaciela od zaplecza. Po zajęciu Mediolanu 2 czerwca 1800 roku, zgodnie z planami Napoleona Austriacy znaleźli się w pułapce. Dowodzący armią austriacką generał Melas zarządził odwrót spod Genui w kierunku na Mediolan, ale właśnie wtedy Genua skapitulowała. Mając za sobą wsparcie angielskiej floty panującej na Morzu Śródziemnym i dostarczającej mu zaopatrzenie przezport w Genui, Melas mógł nie obawiać się Napoleona, ten jednak wyruszył mu naprzeciw, chcąc odciąć Melasa od miasta. Bonaparte rozwinął swe wojska szerokim wachlarzem szukając nieprzyjaciela. 9 czerwca doszło do starcia korpusu Lannesa z częścią sił austriackich pod Montebello, ale później kontakt z nieprzyjacielem znów się zerwał. Na południe od nich, w północnej dolinie Padu operowała dywizja generała Desaixa.

Atak austriacki rozpoczął się o 6 rano, ale spowalniany koniecznością przejścia przez rzekę rozwinął się w pełni dopiero około 9.

Straż przednia Austriaków w sile 3300 ludzi pod dowództwem generała Andreasa O'Reilly zepchnęła siły francuskie i zajęła pozycje na prawym skrzydle. Centrum, w sile około 18 000 żołnierzy pod dowództwem generała Zacha posuwało się naprzód, aż do momentu, gdy natrafiło na opór dwóch dywizji francuskich korpusu generała Victora w Marengo. Lewe skrzydło austriackie w sile 7500 ludzi dowodzonych przez generała Otta kierowało się na wieś Castel Ceriolo dokładnie na północ od pozycji francuskich. Austriacy błędnie uważali, że wieś ta jest opanowana przez Francuzów, jednak ruch ten groził atakiem z flanki na pozycje francuskie i odcięciem linii komunikacyjnych z Mediolanem.

Francuzi utrzymywali linię Fontanone do południa, oddziały Victora zostały w tym czasie wzmocnione częścią sił Lannesa i Murata – oddziały Lannesa przeszły na prawe skrzydło, kawaleria Murata (w tym kirasjerzy Kellermana) walczyła na lewym.

Około godziny 11 Napoleon zorientował się, że może przegrać bitwę. Wysłał rozkaz do Desaixa nakazując mu natychmiast wracać, a podległym mu oddziałom wydał rozkaz obrony do upadłego, mobilizując jednocześnie do walki wszelkie rezerwy jakie posiadał.

Około 14 Francuzi utracili Marengo i wciąż cofali się stawiając zaciekły opór w kierunku wsi San Giuliano.

Około piętnastej Melasowi wydawało się, że bitwa jest wygrana i wysłał kuriera do Wiednia z wiadomością o zwycięstwie. Armia Bonapartego cofała się stawiając rozpaczliwy opór, Austriacy szykowali się do zadania decydującego ciosu. W tym samym jednak czasie w sztabie Bonapartego zjawił się Desaix z informacją, że jego dywizja w sile 5000 ludzi i 8 dział jest w odległości około godziny marszu od Marengo. Francuzi musieli wytrwać jeszcze dwie godziny. Według przekazów, Desaix pytany o ocenę sytuacji, miał powiedzieć:

Ta bitwa jest już przegrana, ale jest dopiero druga, zdążymy wygrać następną.

Około szesnastej Francuzi byli gotowi do kontrataku. Generał artylerii Marmont dysponował osiemnastoma działami (z początkowych piętnastu zostało mu pięć, pięć nadeszło z rezerwy, osiem przyprowadził Desaix). To, co nastąpiło później, znawcy sztuki wojennej opisują jako najlepiej przeprowadzoną w całej historii wojen operację taktyczną łącznego działania piechoty, artylerii i kawalerii (cyt. zaArchibald Gordon Macdonell, "Napoleon i jego marszałkowie").

Austriacka kolumna szturmowa przez 20 minut ostrzeliwana była ogniem dział Marmonta, po czym do ataku ruszyła dywizja Desaixa. Marmont podciągnął czterodziałową baterię, by wesprzeć jego atak i bezustannie kartaczował Austriaków powstrzymując chwiejące się momentami oddziały Desaixa. Na domiar wszystkiego w szeregach Austriaków wybuchł jaszcz amunicyjny, co wywołało zamieszanie w ich szeregach. W tym momencie piechota Desaixa poderwała się do szturmu, a jednocześnie ciężka kawaleria Kellermana w sile około 400 ludzi ruszyła do szarży. Wkrótce kolumna austriacka przestała istnieć, a dowodzący nią generał Zach, któremu Melas zdał dowództwo nad całą armią, dostał się do niewoli. Około 18 było właściwie po bitwie, choć walki przeciągnęły się do godziny 22, gdy Austriacy pod dowództwem generała Otto wycofali się za Bormidę.