收复两京。
肃宗刚到灵武的时候,朔方精兵都在郭子仪、李光弼的率领下,奔赴河北平叛了,故灵武的兵力很弱,这让肃宗心里很不踏实。于是,他命令河西节度使李嗣业率兵五千勤王,又从安西发精兵七千人。到了七月底,郭子仪又率五万大军从河北归来,到这个时候,灵武的军威开始雄壮起来,人们终于看到了复兴的希望。当然,这些兵力还不足以平灭叛军,于是,肃宗又派朔方大将仆固怀恩等人去回纥借兵。
在灵武,极具战略眼光的谋臣李泌向肃宗提出了先攻取叛军老巢范阳,再收复两京的计划,规劝肃宗不要希望速胜。肃宗本来同意了这一策略,但形势的变化使他最后改了主意。
至德二载(757年)正月,安禄山被其子安庆绪所杀。二月,肃宗来到凤翔,各地的勤王之师也聚集至此,九月,回纥可汗派其子叶护率精骑四千多人也抵达凤翔。于是,肃宗决心先收复长安,以便尽早把玄宗从成都请回来,免得有两个权力中心。四月,他任命长子广平王李俶为元帅,郭子仪为副元帅,担负起收复两京的作战任务。
九月十三日,郭子仪等率军十五万,从凤翔出发。二十七日,在长安城南不远处的香积寺北大败叛军,次日收复了长安。郭子仪等继续率兵追击叛军,到十月十六日,安庆绪逃离洛阳,退往相州(今河南安阳),两天之后,广平王李俶进入东都。至此,两京全部收复。
十二月初,逃往四川达两年之久的唐玄宗回到了长安,文武百官、京城士庶欢呼舞蹈,夹道欢迎,许多父老流下了激动的泪水,说:“不图今日再见二圣!”在欢庆胜利的时候,人们似乎已经原谅了这位酿成大错的皇帝。
唐军虽然收复了两京,但叛军的有生力量并未被消灭。安庆绪退保相州之后,忌惮留守范阳的史思明实力强大,于是派人去征调他的军队。史思明不愿受安庆绪的摆布,于是以所部十三郡、兵八万投降朝廷。当然,这只是表面上的归顺,朝廷自然更不放心,没过多久,史思明又再次发动了叛乱。
乾元元年(758年)七月,唐肃宗以幼女宁国公主嫁给回纥可汗,感谢其在收复两京中的关键作用,并再次要求回纥出兵帮助唐军讨伐安庆绪。九月,肃宗命郭子仪、李光弼等九位节度使率军征讨安庆绪,他不愿将军权交给一个人掌握,于是特意不设置元帅,而由宦官鱼朝恩为“观军容使”,这使得唐军缺乏统一指挥,为后来的惨败埋下了伏笔。十月,郭子仪等攻拔卫州(今河南汲县),进围相州。安庆绪无奈,向史思明求救。
第二年三月,史思明率军十三万与唐军在相州决战,结果六十万唐军竟一战而溃。不久,郭子仪被朝廷解除了兵权,召回长安。而叛军方面,史思明很快诱杀了安庆绪,自立为大燕皇帝,并把范阳改称为燕京。到了九月,他率军南下,重新占领了东都洛阳。只是在李光弼的努力下,局势才没有进一步恶化。
到了上元二年(761年)三月,安禄山的命运又在史思明的身上重演,他也被自己的长子史朝义所杀。由于史思明所部的节度使都是当年安禄山的旧将,地位本来就与史思明不相上下,他们当然不愿为史朝义卖命,叛军的力量在内部矛盾中有所削弱。
宝应元年(762年)四月,唐玄宗、肃宗父子先后去世,他们最终还是未能等到天下复归太平的那一天。太子李豫,也就是以前的广平王李俶即位,是为唐代宗。他再次向回纥借兵,于这年十月收复了洛阳。在仆固怀恩的率领下,官军乘胜渡过黄河追击史朝义,迫使叛军的重要将领薛嵩、张忠志、田承嗣等相继投降了朝廷。最后,连叛军老巢范阳的节度使李怀仙也向朝廷请降,史朝义无奈,试图向北逃入契丹,但被李怀仙部下追及,被迫自杀。
唐玄宗泰陵
至此,历时七年零两个月的安史之乱终于结束了。