11月,謝玄派譴勇將劉牢之率精兵5千奔襲洛澗,揭開了淝水大戰的序幕。秦將梁成率部5萬在洛澗邊上列陣迎擊。劉牢之分兵一部迂回到秦軍陣後,斷其歸路;自己率兵強渡洛水,猛攻秦軍。秦軍驚慌失措,勉強抵擋一陣,就土崩瓦解,主將梁成和其弟梁雲戰死,官兵爭先恐後渡過淮河逃命,1.5萬餘人喪生。洛澗大捷,極大鼓舞了晉軍的士氣。
由於秦軍緊逼淝水西岸布陣,晉軍無法渡河,隻能隔岸對峙。謝玄就派使者去見苻融,用激將法對他說:“君懸軍深入,而置陣逼水,此乃持久之計,非欲速戰者也。若移陣少卻,使晉兵得渡,以決勝負,不亦善乎?”秦軍諸將都表示反對,但苻堅認為可以將計就計,讓軍隊稍向後退,待晉軍半渡過河時,再以騎兵衝殺,這樣就可以取得勝利。苻融對苻堅的計劃也表示讚同,於是就答應了謝玄的要求,指揮秦軍後撤。但秦兵士氣低落,結果一後撤就失去控製,陣勢大亂。謝玄率領8千多騎兵,趁勢搶渡淝水,向秦軍猛攻。朱序則在秦軍陣後大叫:“秦兵敗矣!秦兵敗矣!”秦兵信以為真,於是轉身競相奔逃。苻融眼見大勢不妙,急忙騎馬前去阻止,以圖穩住陣腳,不料戰馬被亂兵衝倒,被晉軍追兵殺死。失去主將的秦兵越發混亂,徹底崩潰。前鋒的潰敗,引起後續部隊的驚恐,也隨之潰逃,行成連鎖反應,結果全軍潰逃,向北敗退。秦軍潰兵沿途不敢停留,聽到風聲鶴唳,都以為是晉軍追來。晉軍乘勝追擊,一直到達壽陽附近的青岡。秦兵人馬相踏而死的,滿山遍野,充塞大河。苻堅本人也中箭負傷,逃回至洛陽時僅剩10餘萬。
晉軍收複壽陽,謝石和謝玄派飛馬往建康報捷。當時謝安正跟客人在家下棋。他看完了謝石送來的捷報,不露聲色,隨手把捷報放在旁邊,照樣下棋。客人知道是前方送來的戰報,忍不住問謝安:“戰況怎樣?”謝安慢吞吞地說:“孩子們到底把秦人打敗了。”(“小兒輩已破賊!”)客人聽了,高興得不想再下棋,想趕快把這個好消息告訴別人,就告別走了。謝安送走客人,回到內宅去,他的興奮心情再也按捺不住,跨過門檻的時候,踉踉蹌蹌的,把腳上的木屐的齒也碰斷了。這是著名的典故“折屐齒”的來曆。
淝水之戰,前秦軍被殲和逃散的共有70多萬。唯有鮮卑慕容垂部的3萬人馬尚完整無損。苻堅統一南北的希望徹底破滅,不僅如此,北方暫時統一的局麵也隨之解體,再次分裂成更多的地方民族政權,鮮卑族的慕容垂和羌族的姚萇等其他貴族重新崛起,各自建立了新的國家,苻堅本人也在兩年後被姚萇俘殺,前秦隨之滅亡。此戰的勝利者東晉王朝雖無力恢複全中國的統治權,但卻有效地遏製了北方少數民族的南下侵擾,為江南地區社會經濟的恢複和發展創造了條件。淝水之戰也成為以少勝多的著名戰例,載入軍事史,對後世兵家的戰爭觀念和決戰思想產生著久遠影響。