桓溫北伐失敗原因:不想收復失地只為撈取政治資本
後趙滅亡,中原大亂,是東晉立國江東以來沒有碰到過的復國良機。然而,朝廷與桓溫互相猜疑,殷浩、桓溫北伐又相繼失敗,最終未能扭轉偏安的局面。這是讀史者一直引以為憾的事情。
穆帝永和五年(349年),在石虎死後,北方亂事初起之時(參見第十八篇),後趙壽春守將降晉,大量北方士民南遷,依附晉朝。桓溫抓住時機,進屯安陸(今屬湖北),準備進取。朝廷卻不願讓桓溫立功,而讓穆帝的外祖父、褚太后的父親褚裒做征討大都督,督師北伐。結果代陂一戰,北上接應魯郡(治今山東曲阜)歸附民眾的王龕、李邁全軍覆沒。褚裒就從彭城(今江蘇徐州)退到廣陵。已經進據壽春的將領陳逵也嚇得燒燬軍需,毀城南逃。渡黃河南遷的百姓二十多萬人沒有人接應,至此陷入絕境,差不多死光。這次北伐也就此結束。褚裒氣憤,又自覺慚愧,不久便在京口(今鎮江)病死。此人是個名士,雖系外戚,倒並不想抓權,確有可取之處,但是讓他去領兵打仗,就不免要誤國了。
永和六年(350年),即冉閔稱帝那一年,北方更亂。閏二月,朝廷任殷浩都督揚、豫、徐、充、青五州諸軍事,準備北伐。從這時起,到九年十月山桑(今安徽蒙城北)之敗止,殷浩負經略北方的責任達三年八個月之久,結果是誤了大局,也誤了自己,成為歷史的罪人。
當時的北方形勢,對晉既極有利,又極複雜,非真英雄真豪傑,是駕馭不了的。氐蒲洪、羌姚弋仲都想割據稱雄,同時又遣使降晉,目的無非是借晉自重:永和六年,符健(蒲洪子,洪改姓符)進關中,自稱晉征西大將軍、雍州刺史。他到了長安,還派使者到建康去獻捷。但他一旦立定了腳跟,就於七年(351年)正月自立秦國(前秦)了。
永和七年,姚弋仲在後趙的殘餘勢力被消滅後(指石祗被殺,見第十八篇),即派使者向晉投降。晉朝給他六夷大都督的官名,封大單于、高陵郡公。次年他死後,兒子姚襄先打算爭關中,只因為被前秦兵打敗,才又南下投東晉,到壽春去見晉將謝尚。
此外後趙廩丘(今山東鄆城西)守將周成、許昌守將張遇等也因後趙滅亡降晉。這些地方,晉廷如能控制,才能真正為晉朝所有,否則說變就變,降將也會再叛。永和八年(352年),殷浩以為可以進兵許昌、洛陽了,即命謝尚、荀羨為督統,進屯壽春。不知謝尚怎麼一來,就激怒了張遇。他馬上變卦,不讓晉軍進兵。殷浩、謝尚拿他沒有辦法,停了好幾個月不動。姚襄到壽春後,謝尚和他合兵攻許昌,卻被前秦的救兵打敗。這次北伐就擱淺了。
王羲之對此非常擔心,他勸會稽王昱和殷浩歇手。他的意見似乎太保守,然而未嘗沒有道理。他說的「軍破於外,資竭於內」,是實際情況;他說當時是「以區區吳越經緯天下十分之九」,也符合實際情況。荊、江等州在桓溫控制之下,朝廷無法利用那邊的人力、物力。益州(蜀中)遙遠,朝廷也得不到任何好處。他主張減輕賦役,與民休息,從長遠來說,是培養國力的根本辦法,可是即使不繼續用兵,也是做不到的。
殷浩不聽他的勸告,硬著頭皮幹下去。他要減少軍事以外的開支,把太學生徒也遣散了。其實多這一點財力,不會起多大作用,而停辦太學,其負面影響卻不可輕估。殷浩非但不懂軍事,其實也不懂政治。
這年十月,由於前秦把張遇所部和陳、穎、許、洛的五萬多戶居民遷往關中,只留少數秦軍駐防,謝尚總算收復了許昌。這是東晉惟一的一點收穫。
永和九年(353年),由於前燕在上年取得鄴和若於北方州郡,基本上形成了與晉、燕、秦鼎峙的形勢(西北的前涼可以視為晉的方面軍),其中晉的兵力最弱。姚襄一軍是有相當戰鬥力的,殷浩如果駕馭得了姚襄,實力對比上可以有利得多。還有桓溫也有相當實力,如果殷浩聽王羲之的勸告,和桓溫和衷共濟,團結對外,東晉的形勢也可以好得多。可是,殷、桓兩人各幹各的,桓溫還要等著看殷浩出洋相。殷浩對姚襄是忽而欲置之死地而後快,忽而要他出死力打仗,如此作為,不出大亂子才怪。
姚襄屯兵歷陽(今安徽和縣),在淮河兩岸墾募電田,練兵積粟。姚襄這個人,和他的父親姚弋仲不同。姚弋仲是個直性子的老羌人,對石虎也是想什麼就說什麼,跟了石氏便忠心耿耿。而姚襄除勇敢善戰外,又博學善談論,所以謝尚同他很談得來,江東人士也都看重他。
殷浩在壽春,怕姚襄不可靠,就扣留了他的幾個兄弟,還幾次派刺客去行刺,可刺客卻把真實情況都告訴了姚襄。殷浩甚至命降將魏憬領本部人馬去襲擊姚襄。姚襄殺了魏憬,收編了他的人馬。殷浩對姚襄的猜疑越來越深,為了不讓他在內地駐防,就請朝廷任他為梁國內史,調到北邊的蠡台(在今河南商丘南)。姚襄的使者到壽春去見殷浩,殷浩提出姚襄有不服從命令的問題,從此兩人互不信任的情況公開化了。
這年十月,殷浩誤信前秦內部有人作內應的情報,便使姚襄為前鋒,領兵北伐,想收復洛陽。姚襄引兵北上,估計殷浩將到,詐令所部在夜間逃跑,暗地裡設下埋伏。殷浩得訊,領兵去追,在山桑中伏,大敗潰退。他收拾餘部,發動反擊,又告失敗。姚襄渡過淮河,屯兵盱眙,招募流民,把部隊擴充到七萬人,再派人到建康,陳訴殷浩的罪狀。以後姚襄引軍北還,這裡就不再去講他了。
桓溫見殷浩兵敗,十分得意。永和十年(354年)正月,他上疏要求廢黜殷浩。朝廷無奈,便把殷浩廢為庶人(平頭百姓)。殷浩罷官後,住在朝廷指定的信安縣(今浙江衡州)。他心中煩悶,常常「書空作'咄咄怪事'」四個字。桓溫倒不想把他完全打倒,寫信告訴他,準備推薦他做尚書令。殷浩見信,大喜過望,馬上提筆寫回信,送出前恐泊內容有錯,拆了封,封了拆,最後送出去的竟是一封空函。桓溫拆開看了大怒,殷浩的庶人就只能做到底了。
殷浩既被廢黜,永和十年二月,桓溫立即率領步騎四萬人,從江陵出發伐秦。水軍從襄陽上溯沔水(今漢水)上遊人均口(在今湖北丹江口西,即今浙川入湧水口,浙川舊稱均水),到南鄉(今湖北均縣);步兵從淅川(今河南內鄉)向武關前進;同時命梁州刺史司馬勳從子午道(從今陝西安康北上,越秦嶺,至今長安縣東)進兵關中。四月間的藍田(今陝西藍田西)之戰打得非常激烈。秦將符生單騎突陣,在晉軍陣中衝出衝進十來次,殺傷雖多,仍舊挽不回戰局,結果大敗而退。接下,桓溫的兄弟桓沖又在白鹿原(在今藍田西)擊敗秦將符雄。桓溫進到灞上(在白鹿原北,今西安東灞水上),符健只帶六千老弱守長安小城,命雷弱兒等率僅有的三萬精兵抵敵晉軍。至此只有司馬勳一路人馬因遭符雄襲擊,打得並不順利。
永和七年,姚弋仲在後趙的殘餘勢力被消滅後(指石祗被殺,見第十八篇),即派使者向晉投降。晉朝給他六夷大都督的官名,封大單于、高陵郡公。次年他死後,兒子姚襄先打算爭關中,只因為被前秦兵打敗,才又南下投東晉,到壽春去見晉將謝尚。
此外後趙廩丘(今山東鄆城西)守將周成、許昌守將張遇等也因後趙滅亡降晉。這些地方,晉廷如能控制,才能真正為晉朝所有,否則說變就變,降將也會再叛。永和八年(352年),殷浩以為可以進兵許昌、洛陽了,即命謝尚、荀羨為督統,進屯壽春。不知謝尚怎麼一來,就激怒了張遇。他馬上變卦,不讓晉軍進兵。殷浩、謝尚拿他沒有辦法,停了好幾個月不動。姚襄到壽春後,謝尚和他合兵攻許昌,卻被前秦的救兵打敗。這次北伐就擱淺了。
王羲之對此非常擔心,他勸會稽王昱和殷浩歇手。他的意見似乎太保守,然而未嘗沒有道理。他說的「軍破於外,資竭於內」,是實際情況;他說當時是「以區區吳越經緯天下十分之九」,也符合實際情況。荊、江等州在桓溫控制之下,朝廷無法利用那邊的人力、物力。益州(蜀中)遙遠,朝廷也得不到任何好處。他主張減輕賦役,與民休息,從長遠來說,是培養國力的根本辦法,可是即使不繼續用兵,也是做不到的。
殷浩不聽他的勸告,硬著頭皮幹下去。他要減少軍事以外的開支,把太學生徒也遣散了。其實多這一點財力,不會起多大作用,而停辦太學,其負面影響卻不可輕估。殷浩非但不懂軍事,其實也不懂政治。
這年十月,由於前秦把張遇所部和陳、穎、許、洛的五萬多戶居民遷往關中,只留少數秦軍駐防,謝尚總算收復了許昌。這是東晉惟一的一點收穫。
永和九年(353年),由於前燕在上年取得鄴和若於北方州郡,基本上形成了與晉、燕、秦鼎峙的形勢(西北的前涼可以視為晉的方面軍),其中晉的兵力最弱。姚襄一軍是有相當戰鬥力的,殷浩如果駕馭得了姚襄,實力對比上可以有利得多。還有桓溫也有相當實力,如果殷浩聽王羲之的勸告,和桓溫和衷共濟,團結對外,東晉的形勢也可以好得多。可是,殷、桓兩人各幹各的,桓溫還要等著看殷浩出洋相。殷浩對姚襄是忽而欲置之死地而後快,忽而要他出死力打仗,如此作為,不出大亂子才怪。
姚襄屯兵歷陽(今安徽和縣),在淮河兩岸墾募電田,練兵積粟。姚襄這個人,和他的父親姚弋仲不同。姚弋仲是個直性子的老羌人,對石虎也是想什麼就說什麼,跟了石氏便忠心耿耿。而姚襄除勇敢善戰外,又博學善談論,所以謝尚同他很談得來,江東人士也都看重他。
殷浩在壽春,怕姚襄不可靠,就扣留了他的幾個兄弟,還幾次派刺客去行刺,可刺客卻把真實情況都告訴了姚襄。殷浩甚至命降將魏憬領本部人馬去襲擊姚襄。姚襄殺了魏憬,收編了他的人馬。殷浩對姚襄的猜疑越來越深,為了不讓他在內地駐防,就請朝廷任他為梁國內史,調到北邊的蠡台(在今河南商丘南)。姚襄的使者到壽春去見殷浩,殷浩提出姚襄有不服從命令的問題,從此兩人互不信任的情況公開化了。
這年十月,殷浩誤信前秦內部有人作內應的情報,便使姚襄為前鋒,領兵北伐,想收復洛陽。姚襄引兵北上,估計殷浩將到,詐令所部在夜間逃跑,暗地裡設下埋伏。殷浩得訊,領兵去追,在山桑中伏,大敗潰退。他收拾餘部,發動反擊,又告失敗。姚襄渡過淮河,屯兵盱眙,招募流民,把部隊擴充到七萬人,再派人到建康,陳訴殷浩的罪狀。以後姚襄引軍北還,這裡就不再去講他了。
桓溫見殷浩兵敗,十分得意。永和十年(354年)正月,他上疏要求廢黜殷浩。朝廷無奈,便把殷浩廢為庶人(平頭百姓)。殷浩罷官後,住在朝廷指定的信安縣(今浙江衡州)。他心中煩悶,常常「書空作'咄咄怪事'」四個字。桓溫倒不想把他完全打倒,寫信告訴他,準備推薦他做尚書令。殷浩見信,大喜過望,馬上提筆寫回信,送出前恐泊內容有錯,拆了封,封了拆,最後送出去的竟是一封空函。桓溫拆開看了大怒,殷浩的庶人就只能做到底了。
殷浩既被廢黜,永和十年二月,桓溫立即率領步騎四萬人,從江陵出發伐秦。水軍從襄陽上溯沔水(今漢水)上遊人均口(在今湖北丹江口西,即今浙川入湧水口,浙川舊稱均水),到南鄉(今湖北均縣);步兵從淅川(今河南內鄉)向武關前進;同時命梁州刺史司馬勳從子午道(從今陝西安康北上,越秦嶺,至今長安縣東)進兵關中。四月間的藍田(今陝西藍田西)之戰打得非常激烈。秦將符生單騎突陣,在晉軍陣中衝出衝進十來次,殺傷雖多,仍舊挽不回戰局,結果大敗而退。接下,桓溫的兄弟桓沖又在白鹿原(在今藍田西)擊敗秦將符雄。桓溫進到灞上(在白鹿原北,今西安東灞水上),符健只帶六千老弱守長安小城,命雷弱兒等率僅有的三萬精兵抵敵晉軍。至此只有司馬勳一路人馬因遭符雄襲擊,打得並不順利。
晉軍的勝利在關中引起巨大震動,郡縣守令都來投降,居民爭先恐後地帶了牛酒來慰勞將士,男男女女夾道觀看,並不畏懼。有些老人感動流淚,說:「想不到今生竟能再看到官軍!」(關中陷落已達三十八年)
遺民的歡愉轉瞬又變成了失望。順陽太守薛珍勸桓溫不要逗留霸上,應該乘勝進逼長安,但桓溫沒有採納。他行軍數千里,補給是個大問題。漢水上遊,水狹流急,運輸困難。他原指望能以關中平原的新麥補充軍糧,不幸秦人用清野之計,把麥都割了。軍中缺糧,人員傷亡也無法補充。五月中再戰白鹿原,晉軍再也佔不到優勢,損失了一萬多兵力。六月初,桓溫只得撤走,秦軍隨後追擊,晉軍又損失了上萬人。
後來做了前秦符堅的宰相的王猛,其時隱居華陰。他到軍中見桓溫,「捫虱而談當世之務」。桓溫對他很佩服,問他:「我奉天子之命,領十萬大軍人關,為百姓滅除殘賊,而秦中豪傑不起而響應,這是什麼緣故?」王猛答道:「明公不遠數千里,深入敵境,現在長安近在咫尺而不渡浦水,百姓不瞭解明公的用意,所以不敢響應。」桓溫無話可答,只好另換話頭應付過去。桓溫撤走時,希望王猛跟他南下。王猛不肯,後來就為符堅所用。
王猛和薛珍都認為桓溫應該渡灞水直逼長安,王猛更以為桓溫不急攻長安是另有用意。至於用意何在,後人多以為桓溫北伐的目的只是向朝廷示威,作為奪取政權的資本,而並沒有滅秦的決心。這也許是正確的,但並非沒有其他解釋的餘地。桓溫如能一舉滅秦,他的政治資本豈不更足?筆者認為,桓溫是很想一舉滅秦,以樹立更大威望的,可是他對於初次見面的王猛,不可能直陳胸襟。他不是說了「十萬大軍」嗎?他不好對王猛說只有不滿四萬人。從他向王猛提的問題看,他除有以關中新麥補充軍糧的願望,還估計過將來關中會出現豪傑群起響應的局面(這並不是空想,是可能的。晉陞平元年[357年],前秦內亂時,秦將張平以降晉為名,企圖割據,據有今山西境內的好幾個郡,有三百多個壁壘,各族人等十多萬戶,可為例證)。現在兩個願望都落了空,而直逼長安,難道會一攻必克?如攻而不克的話,要想撤走也就難了。兵力不足應是桓溫最大的難處。我們看東晉這段歷史,最可惋惜的是統治者內部不團結。殷浩以七萬人北伐而潰於山桑,桓溫以四萬人伐秦而對長安可望不可即,如殷、桓合作,十萬大軍是否就能北定中原呢?歷史上的許多憾事,根源多是內部不團結,這是值得世世代代記取的。
桓溫沒有滅秦的實力,然而在黃河以南還是能有些作為的。當時冉魏的舊將周成佔了洛陽,姚襄北歸佔了許昌,又北上與周成爭洛陽,情況非常混亂。永和十二年(356年),桓溫向朝廷提出一個表面上光明正大的請求:「移都洛陽,修復園陵。」朝廷便命他去討伐姚襄。這個任務,他輕鬆地完成了。這年八月,他從江陵北上到洛陽城南的伊水,一戰擊敗姚襄。姚襄西走後,周成又投降,桓溫便進了洛陽,謁西晉諸帝陵,對有毀壞的即令人修復,還留兵戍守,然後班師還江陵。
這是桓溫為晉朝立的大功勞。在以後幾年間,桓溫與朝廷也相安無事。然而,朝廷在與前燕發生衝突中的表現,卻又挑起了桓溫輕視朝廷的心理。
後趙亡後,鮮卑段部的後人段龕據廣固(今山東青州西北)稱齊王。晉永和十一年(355年),前燕慕容恪進攻廣固。段據向晉求救。晉徐州刺史荀羨救燕,他雖不敢進軍廣固,然晉燕之間,在今山東、河南與蘇皖北部的衝突,自此連綿不斷。永和十二年,廣固在困守十個月後投降。以後晉、燕衝突,晉一直處於劣勢。
昇平三年(359年),晉使豫州刺史謝萬、徐兗二州刺史郗曇攻燕。謝萬是後來成為東晉名相謝安的兄弟,也是個大有名氣的名士。王羲之得知了這道任命,就寫信勸他「與士卒之下者同甘苦」。謝安也對他說:「你做元帥,必須經常接待眾將,使他們心悅誠服。」謝萬做不到與士卒同甘苦,便聽兄長的話,召集眾將會議,他找不出話來,便把手中的鐵如意指著大家說:「諸將皆是勁卒。」那時候階級區別森嚴,把將校叫作兵卒是有侮辱性的,眾將聽了,對他十分怨恨。謝安知道這位老弟不可救藥,怕他送掉性命,就特地趕到他統率的軍中,與各級軍官聯絡感情,連最下級的軍官也不例外。後來謝萬兵敗逃回時,部下看了謝安的面子,才沒有殺害他。朝廷用這等人做元帥,實在是天大的笑話。郗曇是郗鑒(見第十五、十六篇)的兒子,也是個文士。
這次出兵的出發點,謝萬是在下蔡(今安徽鳳台),郗曇是在高平(今山東鄒城西南)。謝萬由渦水、穎水之間進軍,去救洛陽。不料郗曇生病,退屯彭城(今徐州),謝萬得報,以為是打了敗仗,連忙退兵,結果軍心慌亂,就此大潰而散。他逃還之後,被廢為庶人。於是許昌、穎川、瞧(今安徽毫州)、沛(今安徽濉溪西北)等城都被燕軍佔領,洛陽孤立,陷入極危險的處境。這時若不是燕主慕容攜病重,到下年(360年)正月病死,加以嗣君慕容瑋年幼,內部政爭劇烈,燕軍勢必大舉攻晉。
昇平五年(361年),燕將呂護叛變,想引晉兵襲擊鄴(燕於357年遷都鄴)。燕慕容恪引兵攻野王(今河南沁陽,在黃河以北)。他不願意多犧牲士卒,就圍而不攻。桓溫乘他們相持的時候,使兄弟桓豁領兵收復了許昌。
燕軍把野王包圍了好幾個月,呂護支持不下去,便突圍逃走,野王投降。不久,呂護仍還燕國,依舊做了燕國將官。晉哀帝隆和元年(362年,穆帝在上年去世,年僅十九歲。哀帝司馬丕是成帝的兒子,原封琅邪王),燕讓呂護將功贖罪,領兵攻晉洛陽,守將陳祐只有一千多兵,哪裡夠用,連忙告急。五月,桓溫一面派三千兵去援助,一面乘機嚇一下朝廷大僚。他上疏重提前議,請求遷都洛陽,而且加上一條:從永嘉(307~312年)之亂以來南遷人士,一律北移,以充實河南。
這道奏疏使滿朝官員大起恐慌,他們害怕桓溫,又不敢公然提出異議。他們為什麼恐慌?原來南遷以後,那些丟了北方田莊的人在江南廣殖田園,佔有山澤。王、謝等大族,為避免與孫吳以來的江東大族摩擦,已遠渡浙江,在浙東立業。如果一律北遷,他們豈不要再受一次與南遷同等的損失,怎麼能夠不怕。再說,洛陽地處前線,正在戰時狀態中,如果軍事失利,又得倉皇逃難。這些生活奢華的士大夫想起來也怕,怎麼敢去!
散騎常侍領著作郎孫綽打破了沉悶,上疏說明不可北遷的理由。他講得相當坦率,說:「喪亂以來,己有六十多年(他從八王之亂的混戰算起),中原早成丘墟。南遷士民的子孫也老的老,死的死,如今要離墳墓,棄生業,遠涉萬里,田地房屋賣不掉,車輛船隻無從獲得,一路上死亡的人勢必很多。他建議先派有威望的將帥鎮守洛陽(這句話是將桓溫一軍,有威望的除了他有誰),收復河南,開通航運,等中原小康,再議遷都。」
他說得倒也合乎情理。但桓溫見了,大為不滿,他令人帶話給孫綽,「興公(孫綽)何不尋君《遂初賦》(孫綽的作品),管人家的國事幹嗎!」
朝廷想派人去同桓溫商量,勸他收回這個主張。揚州刺史王述卻說:「桓溫不過以虛聲嚇唬朝廷而已,只管答應他好了,這在事實上是無從做起的。」於是下了一封詔書,說知道他要親率三軍收復中原,一切都「委之高算」。事情果然就這樣搪塞過去了。呂護攻打了幾個月。後中箭受傷而死。燕軍撤走,洛陽暫時脫離了危險。
哀帝興寧元年(363年),朝廷加桓溫侍中、大司馬、都督中外諸軍、錄尚書事、假黃鉞。這一系列官名意味他是最大的實力派。興寧三年,他移鎮姑孰(今安徽當塗),使兄弟桓豁領荊州刺史,兄弟江州刺史桓沖監江州及荊、豫八郡諸軍事。上下遊的軍政大權,除京口(今江蘇鎮江)外,都進入了桓家的掌握之中。桓溫既然認為晉朝沒有別人能勝過自己,便一步步地走著取晉朝而代之的路子。但是他總覺得還必須北上中原,打一個大勝仗,然後回來再受九錫,才能真正名實兼收。於是,就有了廢帝海西公太和四年的北伐之舉(哀帝於興寧三年因服藥求長生,中毒死,年二十五歲。弟琅邪王奕立)。
太和四年的前幾年間,中原軍事形勢對晉很是不利。許昌得失幾次,終為前燕所有。興寧二年(364年),汝南、陳郡(治今河南淮陽)失守。洛陽孤立,守將陳祐以救許昌為名,逃離洛陽,留沈勁帶五百人守城。這個差使,誰也不願當,沈勁卻非常高興地接了下來。他是王敦死黨沈充的兒子,以父親落個叛逆的惡名為憾事,決心要找個以身殉國的機會,挽回家族的榮譽。此刻機會來了,他自然高興。興寧三年,燕慕容恪、慕容垂領兵到洛陽。這兩人都是名將,打一座只有五百兵守的城,簡直不費吹灰之力。慕容恪攻城,通常不願硬攻,這番認定洛陽城高而兵弱,一鼓可下,不必浪費時間。事實果然如此。沈勁被俘後,慕容恪不想殺他,但部將說看此人的神氣是決不肯為別人所用的,他才把他殺了,事後他還覺得這是件憾事。
太和元年,燕軍又攻拔魯、高平等郡。宛城(今河南南陽)守將獻城降燕。前秦軍也攻掠南鄉郡(治今湖北均縣),把漢水以北的居民擄去了一萬多戶。東晉方面,除桓豁於太和二年(367年)收復宛城外,沒有其他取勝的記錄。
桓溫最後一次北伐就是在這樣的形勢下發動的。他自領徐、兗二州刺史,與江州刺史桓沖、豫州刺史袁真等攻燕。徐、充二州刺史原是郗愔(郗鑒之子、郗曇之兄),治所在京口。桓溫知道京口的兵一向精銳(郗鑒也鎮守過京口,339年他病重時上疏,說「臣所統錯雜,率多北人……或是新附」。這些北方流人及其子孫正是京口的兵源),常說「京口酒可飲,兵可用」。郗愔的兒子郗超是桓溫的參軍,他把父親給桓溫表示願共同北伐的信,抽換信箋,改為說自己年老,願意讓桓溫領徐、充。桓溫有了這根據,便請朝廷調動都倍官職,把京口的軍隊轉到自己的部下。
太和四年四月,桓溫率領步騎五萬人,從姑孰出發。長途遠征,成敗關鍵常常在於補給,而補給能否充足,關鍵又在於運輸。桓溫上次攻前秦,漢水上遊航運艱難是個難題。這次在東面,運輸必須利用汴水。晉時的汴水指從今河南榮陽向東經開封折而東南到徐州入泗水的水道。水流所經的地方,數十年來,戰亂不息,沒有人疏浚,因此水道淤淺難以航行。郗超在出軍之初,就向桓溫提醒這個困難,但桓溫未予重視。六月,到了金鄉(今山東嘉祥南),因天氣乾旱,水道斷絕,桓溫即命毛虎生率軍挖出三百里水道,北起巨野澤(在今山東巨野北的大湖,今為陸地),南到方與縣(今山東魚台西舊城)菏水。在大熱加以干早的日子裡挖這樣長的水道,儘管有部分現成的水道可以利用,也總是非常艱巨的工程。將軍和士兵總不會把自己的體力都消耗到土方工程裡去吧,所以吃此苦頭的無疑是當地的老百姓。這史籍上沒有寫下,但是盡信書不如不讀書,有些歷史的真相是該從沒有字的地方看出來的!這條水道後來叫做桓公瀆。桓溫有了這條水道,即讓大軍乘船,在巨野澤北的清口入清水(清口,即汶水入濟口以下的濟水),再由清水入黃河。船隊浩浩蕩蕩,連綿好幾百里,氣勢威武極了。
郗超又看出了問題。他說:「由清水入黃河,逆流而上,路途又遠,航運難以暢通。如果敵軍不戰,運輸線又斷了,在敵境弄不到糧食,就太危險了。」他提出兩個辦法。一個是全軍直逼鄴城。敵軍如果出戰,可以立即解決;如守城不戰,那麼當此盛夏,百姓散佈田野,盡為國家所有,易水以南勢必全部聽命。若嫌這辦法太冒險,可以用第二個辦法,即屯兵河、濟(指開鑿水道的地區),控制運道,等軍需充足之後,到明年夏天再進兵,這是穩妥的做法。他坦率陳述現行辦法的危險,說:「照現在的辦法,不能速戰速決,敵人必定竭力拖延到秋冬二季,那時水淺不能通航,北方又冷得早,將士缺乏冬裝,就不僅僅是缺糧的問題了。」
郗超說得透徹極了,可是桓溫固執地都不採納。
晉軍打得很精彩,湖陸(今山東魚台東南)、黃墟(約在今河南蘭考東南)、林渚(約在今河南新鄭北)等戰,晉軍都獲全勝。燕高平守將投降。七月,桓溫進到枋頭(今河南浚縣西南淇門渡)。慕容瑋想棄鄴城北逃。其時慕容恪已死,慕容垂不受信任,仍自請領兵拒敵。燕還派遣使臣向前秦求救。秦命苟池、鄧羌領兵救燕,從洛陽進至穎川(治許昌)。
晉軍的優勢不復存在了。慕容垂指揮眾將迎敵,晉軍連遭挫折。桓溫使袁真開石門,打開水運道路。袁真攻下了譙郡(今河南商丘東北)、梁國(今商丘南),但是沒有開成石門(地點不詳,應在上述兩地附近)。燕慕容德等軍進屯石門,截斷了運糧路線。
九月,桓溫被迫燒掉船隻,拋棄輜重,從陸路撤走。慕容垂知道他撤走之初戒備必嚴,只緩緩地跟著推進,過了幾天,估計晉軍己經力盡氣竭,才加緊追擊,終在襄邑(今河南睢縣)大破晉軍,斬首三萬級。晉軍退到譙郡,再遭苟池阻擊,又損失了上萬兵力。
桓溫北伐徹底失敗了。他把過失推到袁真身上,怪他不能完成任務,以致糧運不通。袁真不服,據壽春降燕。從太和五年到六年(370~371年),桓溫費了不少氣力,才收復壽春,殺死袁真的兒子袁瑾(袁真已死)。
桓溫的皇帝夢還想做下去。太和六年十一月,他把皇帝廢為東海王,立會稽王昱做皇帝(簡文帝),改元鹹安。鹹安二年(372年)七月,簡文帝去世,大臣王彪之等立太子做皇帝,是為孝武帝。桓溫原來期待簡文帝會禪位給他,至此大為失望。他幾次暗示朝廷賜他九錫,吏部尚書謝安、侍中王坦之知道他有病,故意拖延。他們沒有失望,孝武帝寧康元年(373年)七月,桓溫死去,年六十二歲。兄弟桓沖代他鎮姑孰,桓沖不是野心家。東晉的政治危機消失了。