晋义熙十二年(公元416年)八月,太尉刘裕统帅大军从建康出发,讨伐后秦。刘裕派遣龙骧将军王镇恶、冠军将军檀道济率领步兵从淮河、淝水向许昌、洛阳进发,另外派出多路军队进攻各战略要地。
王镇恶、檀道济进入后秦境内,所向披靡,连连报捷,不久就功克了许昌。十月,檀道济进军逼近洛阳,后秦镇守洛阳的守将出城投降。次年二月,王镇恶进军渑池,一直抵达潼关。三月,檀道济等人也抵达潼关,与王镇恶会合。
后秦鲁公姚绍出战不利,退守地势险要的据点,并对手下将领说:“敌人兵力不多,孤军深入,只能坚守营垒等待后援。我们分出兵力断绝他们的运粮通道,坐在这儿等他们粮食吃完,就可以将他们活捉。”于是派遣部下把守大路上的据点,断绝了王镇恶他们的运粮通道。王镇恶等人派遣使者去通知刘裕,要求支援粮食和兵力。刘裕正沿着黄河水陆进军,叫来使者,打开船上朝北的窗户,指着黄河北岸牵制他们的北魏大军说:“我都说了让他们不要自己前进,如今轻率地深入, 以至受困。我这儿岸上形势这样,又怎么派得出援军?”王镇恶只好亲自到弘农去,向百姓劝说,晓以大义。百姓纷纷捐献粮食,军队的粮饷重新得补充。
八月初二,刘裕亲抵潼关,王镇恶请求让自己率领水军绕道,从黄河进入渭水,然后从渭水直趋长安,刘裕同意了。
后秦镇北将军姚强与姚难会师,在泾水岸边驻扎,来抵挡王镇恶。王镇恶派毛德祖率领军队进击获胜,杀死了姚强,姚难逃奔长安。王镇恶率领水军沿渭水逆流而上,乘坐蒙冲小舰,划桨的士兵都在船内。后秦人看到战舰前进却没有看到划桨的人,都很惊奇,以为有神仙相助。
二十三日凌晨,王镇恶军队抵达渭桥,命令战士们吃饱喝足,然后全部手持兵器,登上河岸,落后的人斩首。士兵全部登上河岸以后,渭水水流湍急,东晋的战舰随波逐流,瞬息之间,已不见了踪影。王镇恶向士兵们宣告说:“我们的亲属和家园都在江南,这是长安北门,离家有万里之遥,舟船和补给也都被河水带走。如今我们前进作战,胜利了,可以立功扬名。失败了,尸骨都回不了家。就这两种可能,没有第三条路可选。大家努力吧!”
于是,王镇恶身先士卒,冲在前面;士兵们踊跃战斗,争着向前。结果在渭桥大败后秦守卫渭桥的姚丕军队。姚泓领兵救援,却被姚丕的败兵冲击践踏,不战自溃,姚泓单人匹马逃回皇宫。
王镇恶攻进长安城,姚泓和车骑将军姚裕等带着几百名骑兵逃奔石桥。赶来救援的士兵毫无斗志,一下子就溃散了。姚泓打算出去投降,他的儿子姚佛念,才十一岁,对父亲说:“晋人要靠我们来达到他们的目的,就算投降了也不能免死。不如自杀吧。”姚泓没有回答。姚佛念爬上宫墙,自己跳下来自杀而死。姚泓带着妻子儿女以及群臣到王镇恶的军营门口请求投降。