永和五年(349年),后赵皇帝石虎去世,其后诸子争位,后赵国内混乱。其时东晋朝中就已经准备北伐,并由征北大将军褚裒主持北伐,但以失败告终。后赵大将冉闵称帝,建立了魏国,史称冉魏;前燕慕容皝又灭了冉魏。而桓温在当时亦随即移屯安陆,屡次上表请求北伐,但因其平灭成汉后威望太高,朝廷不愿桓温北伐成功而令威名更盛,于是在褚裒北伐以后提拔殷浩继续准备北伐,对桓温的上请不作回应。
同时,北方氐人苻健于永和六年(350年)入关,并于次年建立前秦,至永和八年(352年)称帝。前秦建国后多次与东晋作战。及至永和九年(353年)殷浩发动北伐,目标是前秦控制的洛阳,正是试图利诱前秦将领梁安及雷弱儿叛秦,乘关中混乱,前秦驻洛阳的军力入援之机进取洛阳。
然而,殷浩是个只有虚名、没有军事才能的文人。他出兵到洛阳,被羌人打得大败,死伤了一万多人马,连粮草武器也丢光了。桓温又上了道奏章,要求朝廷把殷浩撤职办罪。晋穆帝没办法,只好把殷浩撤了职,同意桓温带兵北伐。
永和十年(354年)二月己丑日,桓温自江陵率四万步骑北伐,取道武关入关,又命水军自襄阳进至南乡郡;同时梁州刺史司马勋亦经子午道北伐前秦。桓温先派别军进攻上洛,俘获前秦荆州刺史郭敬,于是进击青泥城。前凉秦州刺史王擢见司马勋攻略前秦西部,于是进攻陈仓以作响应。
前秦皇帝苻健面对桓温大军北伐,派遣太子苻苌、丞相苻雄等人率兵五万驻屯峣柳以作抵抗。四月己亥日,桓温在蓝田县与苻苌等军大战,虽然苻生单骑突陈杀伤不少晋兵,但晋兵在桓温的统率下仍大败秦兵;同时桓冲又在白鹿原击败苻雄军 [2]。桓温在大败前秦军队后就继续向长安进发,进据灞上。当时苻苌等军退屯城南,苻健于是尽发精兵三万人,在大司马雷弱儿等人率领下与苻苌会合,只留六千老弱士兵留守长安小城。
当时前秦首都长安危急,三辅各郡县都来向桓温归降,桓温安抚并让居民恢复原来生活。当时居民又争相以牛酒劳军,又夹道观看前来的军队,老人更流着泪说:“不图今朝复睹官军。”面对这个形势,顺阳太守薛珍劝桓温直逼长安,但桓温不听从,驻屯灞上后就没有进渡灞水,一直与前秦军相持,并打算收割当地的麦子作军粮以继续对峙。
但苻雄先率七千骑进袭司马勋,并在子午谷击败他。后又与诸军在白鹿原与桓冲大战,杀晋兵万余人。而当时前秦更抢先一步收割麦子,而且坚壁清野,令桓温陷入缺粮困境。在战事不利和缺粮之下,桓温唯有在六月丁丑日迁关中三千多户人南归。苻苌见桓温退兵,更领兵追击,至潼关时已屡败晋军,伤亡数以万计。冠军将军邓遐一人殿后射伤苻苌,前秦军大惧,不敢再追,晋军才得以安然返回荆州。当时薛珍以桓温被逼退兵,当众称许自己之勇而指责桓温太慎重,于是被桓温指使邓遐所杀。
永和七年(351年),后赵灭亡,后赵将领姚弋仲降晋,其子姚襄亦随父归降,皆获东晋遥封官职及爵位。次年姚弋仲死,姚襄依从父亲遗命南奔东晋,驻屯谯城(今河南省商丘市夏邑县骆集乡)。永和八年(352年),姚襄在谢尚兵败后退屯历阳(今安徽和县历阳镇),并大行屯田及训练将士。然而因为殷浩忌惮姚襄,竟多次派刺客刺杀他,又派魏憬意图偷袭他,最终令姚襄决心叛晋。
永和十年(354年),江西流民郭敞等人在东晋侨置陈留郡的堂邑叛乱,捕掳陈留太守刘仕向姚襄归降。因临近东晋赖以自守的长江天险,令东晋朝廷十分震惊,立刻加强对京师建康的防守。然而,姚襄没有南进,反倒北归,趁东晋调兵防守建康,于是轻松攻下许昌。
另一方面,完成第一次北伐而回荆州的桓温多次上表请求迁都洛阳,修复在洛阳的皇家园陵,当时朝廷畏惧桓温权势无人敢阻拦,唯有孙绰上书终于拦下此事。随后又升桓温为征讨大都督,督司、冀二州诸军事,专委讨伐姚襄之任。而因此就促成桓温发动第二次北伐。
八月己亥日,桓温到达洛阳城南的伊水,久围洛阳不破的姚襄于是撤去围城军,转而抵抗桓温,并在伊水北岸的树林中埋伏精兵,试图诱使桓温率兵后退,在其后退时派伏兵突击。然而桓温拒绝姚襄后退的请求,姚襄意图依伊水而战,而桓温则结阵向前进攻,更亲身披甲督战,于是大败姚襄,姚襄逃到洛阳北山,及后更与余众西奔并州,桓温未能追及。
随后,周成以洛阳向桓温投降。桓温及后留兵戍守洛阳,并且置陵令,修复各个皇陵后就押著周成及带着三千多家归降的平民南归。第二次北伐至此结束。
桓温在第二次北伐成功收复洛阳后声望提高,先于升平四年(360年)进爵南郡公,后更在兴宁元年(363年)进大司马、都督中外诸军事、录尚书事,正式掌握朝政。次年更授桓温扬州刺史,令桓温掌握京畿地区军事。桓温虽然内镇扬州,然而原本所都督的荆、江二州亦交由其两个弟弟桓豁及桓冲掌握,由此桓温基本上集东晋全国军政大权于一身,仅未能掌握徐、兖二州所在的京口及豫州等兵力。
另一方面,原本名义上臣服于东晋的前燕在其君主慕容儁在永和八年(352年)称帝自立后,就多次与东晋发生战事。前燕更多次派兵进攻洛阳,虽勉强能守着洛阳,但河南诸郡除洛阳外其实都被前燕所夺。东晋终在兴宁三年(365年)失去洛阳。司冀等地皆失于前燕后,前燕又进攻兖州等地,于太和元年(366年)又夺取鲁郡和高平郡,甚至曾南侵至竟陵郡。虽然被竟陵太守邓遐打退,但实力膨胀可见一斑。
太和四年(369年),桓温上请北伐,并请与徐、兖二州刺史郗愔、豫州刺史袁真及江州刺史桓冲一同出兵。郗愔是在庾希因救援高平及鲁郡不力而被弹劾免职后受桓温所推,然而其实桓温一直觊觎郗愔部下驻京口的军队,心中很不愿由郗愔统率这些部众。当时郗愔之子郗超是桓温心腹,明白桓温心思后就假作父亲书信,将父亲的徐兖二州刺史的职位让给了桓温,令桓温十分高兴。至四月庚戌日,桓温终自所镇的姑孰领五万人出兵前燕。
然而,郗超又进言,认为桓温入黄河之法是逆着水流而进,与东晋基地距离又远,难通漕运,担心前燕会拒守不战,令晋军陷入粮道断绝,无军粮继续北伐的困境。郗超于是建议桓温尽率全军直击前燕国都邺城,不论前燕逃回辽东后方、拒守邺城或出战与东晋决一胜负皆有利于北伐进展;另郗超又提议一个较稳健的策略,建议桓温守着河道,控制漕运,一直储蓄粮食,直至370年夏天方才继续进攻。郗超又认为若果不速战速决,当战事拖延至秋冬后,水量减少而北方早降温的客观条件之下,会令到晋军更难维持。但桓温都不听从。
桓温随后派桓玄攻取湖陆,更俘获慕容忠。前燕所派慕容厉率步骑二万进攻,邓遐于黄墟大败敌军。之后邓遐、朱序又在林渚击败燕将傅颜,前燕高平太守徐翻更投降东晋。前燕于是再派慕容臧率诸军抵抗桓温,但都失败。至此前燕黄河以南,虎牢关以东领土全部为东晋所有。前燕见此,唯有派人向前秦求救。
七月,前燕汉人孙元率宗族党众起兵响应桓温,桓温于是移屯枋头。当时前燕皇帝慕容暐和太傅慕容评对战事发展都十分恐惧,打算北逃回辽东。但当时慕容垂自己请求进击桓温,慕容暐于是让慕容垂代替慕容臧率众抵抗桓温。同时,慕容暐又以虎牢以西的土地赂诱前秦派兵救援前燕,在王猛的支持下,苻坚于是在八月派苟池及邓羌率步骑二万救援前燕。
当时前燕司徒长史申胤就认为桓温“骄而恃众,怯于应变。大众深入,值可乘之会,反更逍遥中流,不出赴利,欲望持久,坐取全胜。”预料当晋军粮运出现问题时就会不战自败。当时,桓温以昔日归降东晋的段思为向导,前燕尚书郎悉罗腾却击败桓温军,生擒段思。另桓温所派的李述亦被悉罗胜和染干津所杀,令晋军士气下降。同时,桓温早前命袁真攻打谯国和梁国,意图开石门水道以通漕运,但袁真攻取二郡后慕容垂令慕容德率所有骑兵围攻袁真,使其不能开通水道,自己在枋头与桓温对峙,使其不能救援。
九月,前燕开始反击,慕容德率一万兵与刘当驻屯石门,李邽以五千豫州兵断绝桓温粮道。慕容宙则以一千兵设计击败晋军,杀伤大量晋兵。桓温见战事不利,又因粮食将竭,更听闻前秦援兵将至,于是在九月丙申日焚毁船只,抛弃辎重,循陆路退军。只留毛穆之为东燕太守。桓温经仓垣南归,途中凿井取水饮用。当时前燕诸军亦有追晋军,但慕容垂认为桓温新退必然提高警觉,并以猛将邓遐率精锐殿后,不如待晋军见燕军未至,专心从速南退时才大举追击,于是只领八千骑兵从后缓缓跟随。数日后,慕容垂见晋军加快速度,于是加速追击,并在襄邑追及桓温。另一向面,慕容德已经领四千骑兵率先在襄邑设伏,于是桓温在襄邑受两军夹击,晋军大败,死了三万兵。苟池所率的前秦兵亦在谯国邀击桓温,杀伤又以万计。十月己巳日,桓温 [3]收拾散卒,驻屯山阳。叛归东晋的孙元在武阳据守,但都被前燕所擒。第三次北伐至此结束。
桓温北伐,为其带来极大声望,尤其第二次北伐收复洛阳后,桓温曾在隆和元年(362年)请迁都洛阳,并让昔日南渡江左的士庶一律北徙。虽然当时洛阳正受前燕所攻,侨姓士族更加是不愿放弃南方北归,但因朝廷畏惧桓温,竟然没有人敢首先出言谏止,而只有孙绰敢上疏反对 [4]。当时朝廷更打算派侍中劝止桓温,可见桓温在当时的威望极高,足以动摇朝廷。然而,桓温北伐其实得不到举国同心支持,故申胤才有言:“晋室衰弱,温专制其国,晋之朝臣未必皆与之同心。故温之得志,众所不愿也,必将乘阻以败其事。”第三次北伐大败而回,就已令桓的威望大降,只仍因其权倾朝野,故此促使他放弃外讨增加名望,转而对内行废立,于是桓温在太和六年(371年)废黜晋废帝,并且诬陷武陵王司马晞等人,遂更令其威势比皇室更盛。然而,始终因为此败,桓温无法达成其篡位计划,始终受制于王坦之和谢安等士族人士。桓温大败后,北伐之事亦再没进行。