王镇恶请求率水军自黄河入渭水,兵进长安,刘裕同意。后秦恢武将军姚难率军从香城西进,王镇恶率军追击。姚泓进驻石桥,声援姚难。镇北将军姚强和姚难合兵一处,驻扎在泾水岸边,抵御王镇恶。王镇恶派毛德祖进攻,大胜,杀死姚强,姚难逃回长安。
姚赞退到郑县,刘裕率军进逼。姚泓命姚丕驻守渭桥,胡翼度驻守石积,姚赞驻守灞东,他自己则亲自率军驻守逍遥园。
王镇恶乘坐小船逆渭水而上,这种小船不是普通的船,普通的船会使水手暴露在外,这种船的水手是隐藏在船体之内的,所以后秦的人只看见小船乘风破浪而行,却看不见水手,他们非常惊讶,以为晋军有天神帮助。
八月二十三日凌晨,王镇恶军抵达渭桥。他让将士们饱餐战饭,然后重装登陆,命人把小船抛入水中,小船顺流而下。王镇恶进行战前动员,他说道:“我们的吃穿用具都已经顺水流走,今天如果取胜,可以扬名立万,高官厚禄,如果失败,将尸骨无存,大家看着办吧!”说完,他身先士卒,冲在了队伍最前面,将士们也纷纷拼尽全力进攻,大破姚丕军。姚泓率兵来救,却被姚丕的逃兵给冲散了。姚谌等战死,姚泓单枪匹马逃回皇宫。王镇恶从长安城北边的平朔门入城,姚泓和姚裕等率数百个骑兵逃奔到石桥。姚赞率军前来救援,可是走到半路,士兵们已经全逃走了。胡翼度投降了刘裕。