刘裕元兴三年(公元404年)二月二十八日夺占京口,二月二十九日即进军竹里,三月一日连续展开了江乘和罗落桥两场恶战,三月二日,又迎来了覆舟山大战。
经过两场恶战的义军将士,休整了一晚。第二天,义军将士吃过早饭,将剩余的粮食全部扔掉。刘裕命令吃饱喝足的义军将士推进到了覆舟山以东地区。即将到来的覆舟山之战,是一场双方实力悬殊的决战,全靠死打硬拼,没有必胜的把握。对此,刘裕心知肚明,他在战前即做了相应的安排。他命令老弱残兵多带旗帜,分为数路,登上山峦,所到之处,插满旗帜,作为疑兵。远远望去,刘裕义军的军旗布满山岗。
桓玄的侦察兵向桓玄汇报∶"刘裕之军到处都是,不知其确切人数。"桓玄一听更加恐惧,赶忙派遣武卫将军庾赜之率领精锐部队支援前线各军。
刘裕担心有伏兵,他看到刘钟就在身边,说∶“山下肯定有敌人的伏兵,你可率领部下前去探路。”刘钟领命而去,果然发现有数百伏兵,一举将其赶走。
前线桓谦等人的士兵,大多是北府军团的旧人,素来敬重佩服刘裕,与刘裕交战,本来就没有多少斗志。当时,天上突然刮起了猛烈的东北风,义军趁机到处纵火,霎时间,火光烟气遮天蔽日。桓玄军处于下风口,原本就处于劣势,再加上烟气弥漫,一时大乱。刘裕与刘毅等人分率众人,直接朝桓谦中军杀来,刘裕身先士卒,高举将帅大旗,冲到队伍的最前头。义军将士做殊死搏斗,无不以一当百,喊杀声震动天地,建康城内都能听到,桓谦之军大败,刘毅又趁势进击,击破了卞范之之军。
覆舟山之战,几乎摧毁了桓玄在京师的全部军队,这一战也奠定了刘裕光复建康的基础。其实,在桓玄派出增援部队的同时,他就已经决定弃守建康了,他暗中派遣殷仲文在石头城提前准备船只,为西逃做好准备。当桓谦等人失败的消息传来,桓玄立即带着儿子桓升、侄子桓潜,率领数千亲信,对外宣称是要与刘裕决战,实际上却并没有出北门,而是从建康的南掖门出城,往西逃奔石头城,再乘船逃离了建康。
覆舟山之战的当日,刘裕即挺进建康城。自刘裕起义到桓玄败走,仅仅4天时间,真可谓是奇迹。
第二天,即三月三日,刘裕移驻石头城,在那里设立留守政府,恢复晋朝百官职务;在宣阳门外焚烧了桓温的牌位,重新制作晋朝先帝的牌位,安放在太庙中。与此同时,刘裕下令刘毅、何无忌与自己的弟弟刘道规率军西上,追击桓玄;命尚书王跟率领百官前往浔阳,迎接晋安帝;诛杀未曾逃脱的桓氏子弟,如桓石康的侄儿桓权、桓振的哥哥桓洪等人。
刘裕还命令自己的内弟臧熹入宫,收拾图书、器物,并查封朝廷的府库。
长期以来,晋室法律松弛,无人遵从,大族豪门,横行霸道,欺压良善,百姓愁怨,哭诉无门,再加上司马元显政令无常,桓玄虽想加以整治,但他颁发的法令又烦琐众多,吏民无所适从。刘穆之根据具体情况,对当时的法令进行针对性的简化。刘裕以身作则,先以严刑峻法约束百官,重整朝廷秩序,两三天之后,建康官场的风气大变,纳入正轨。在此期间,刘裕和刘穆之要解决的最核心问题,就是留守政府的人事安排。
当初,桓玄被公认为一代豪杰,他接受晋安帝禅让,登上皇帝宝座,晋朝所有的大臣和地方官员都表示效忠于他,尽心侍奉楚国。然而,刘裕地位低微,无现成的军队,竟然在百姓中振臂一呼,数日之内恢复了晋室。原投靠桓玄的晋朝高官们在百姓中的威信顿时大打折扣,对刘裕深为忌惮。
三月五日,经过两天的酝酿,桓玄的司徒王谧与众人打算推举刘裕为扬州刺史,刘裕审时度势,坚决予以推辞,并反过来让王谧当侍中,兼司徒、扬州刺史、录尚书事;王谧则推举刘裕为使持节,都督扬州、徐州、兖州、豫州、青州、冀州、幽州、并州八州诸军事,镇军将军,徐州刺史;刘毅为冠军将军、青州刺史,何无忌为辅国将军、琅邪内史;孟昶为丹阳尹;刘道规为振武将军、义昌太守。刘裕又任命魏咏之为建威将军、豫州刺史,诸葛长民为辅国将军、宣城内史。当然,刘裕与王谧之间的互推,是缺乏合法性的,因此,刘裕还要继续寻找一个合法的代言人。
然而,就在刘裕积极寻找代言人的时候,建康城内却酝酿着一桩阴谋。太原王家自过江以后,历经王承、王述到王坦之三代。王坦之与桓温结为亲家,王坦之共有四子∶王恺、王愉、王国宝、王忱。王坦之四个儿子关系向来不好,王国宝和王忱均为司马道子父子一党,而王恺与王愉和桓氏关系特殊,王愉娶的就是桓温的女儿、桓玄的姐姐。桓玄掌权以后,王愉被任命为尚书仆射,王恺被任命为吴郡太守,不久去世。
刘裕入主建康后,为了安抚旧臣,加王愉为前将军,任命王愉之子王绥为冠军将军。王愉因为自己是桓玄的姐夫,再加上他素来轻视刘裕,因此,内心不安,就与司州刺史温详暗中勾结,企图发动政变,诛杀刘裕。很快有人就告发王愉父子谋反,刘裕下令将其灭门,王绥的弟弟王辑之子、14岁的王慧龙,被王家所养和尚僧彬藏匿,得以幸免。
其实,王愉一家的灭门惨案,极有可能是刘裕报私仇的一场冤案,而王愉父子谋反一事也可能纯属子虚乌有。
王愉被灭门对刘裕而言,既报了宿怨,又杀一儆百,树立了自己的威信,还趁机削弱了门阀士族的势力。