主意已定,刘裕当即与何无忌召集一百多名义士。何无忌假称是朝廷派去的使臣,一骑当先,扬鞭驰入丹徒城。桓修丝毫没有察觉,他听说朝廷派来的使臣已到,忙出署相迎。见了面,还没开口,就被何无忌一刀结束了性命。紧接着何无忌一声令下,党徒大呼讨逆,桓修的部下惊骇不已,霎时溃散,没有一人敢反抗。刘裕驰入府署后,安抚百姓,并将桓修安葬在城外。然后任命东莞人刘穆之为府主簿,让刘毅前往广陵嘱咐孟昶、刘道规即日响应。
孟昶与刘道规立即杀掉桓弘,渡江前往丹徒,与刘裕会合。徐州司马刁弘听说丹徒有变,忙率部下赶到丹徒城,探问虚实。刘裕登城对刁弘说:“我们奉旨拨乱反正,除掉逆党。现在贼人桓玄的首级已经高挂城门。你们都是大晋的臣民,现在无故纠众来此,到底是何居心?”刁弘等人信以为真,当下退去。碰巧刘道规、孟昶已率一千人马赶来,刘裕当即让刘毅去追杀刁弘。刘毅回来报捷,刘裕又致信在京中任职的兄长刘迈,让他立即起事。没想到,刘迈做贼心虚,竟如实禀告桓玄。
桓玄听说刘裕已经发难,不禁十分惊惧,忙任命刘迈为重安侯。刘迈拜谢而出。然而有人对桓玄说:“刘迈说不定是刘裕的同谋。”桓玄随即将刘迈打入大牢,并捕获刘裕的党朋王元德、辛扈兴、童厚之三人,将他们三人与刘迈一同斩首。又召来弟弟桓谦及丹阳尹卞范之等人商议御敌之策。桓谦建议立即发兵,桓玄则想屯兵覆舟山,以守为攻。经桓谦等人再三力请,桓玄才令顿邱太守吴甫之与右卫将军皇甫敷北上遏制刘裕军。
刘裕得知桓玄已经发兵,也锐意进取。他先是封自己为徐州总督,任命孟昶为长史,让孟昶守住京口;然后召集两千名讨逆义士,南下进军;同时令何无忌写好檄文,声讨桓玄。
刘裕起兵后,桓玄天天惊慌万分。有人对桓玄说:“像刘裕这种乌合之众,一定干不出什么大事,你有什么好担心的?”桓玄摇头说:“刘裕是当世的英雄,而刘毅家底虽薄,赌博时却能一掷百万,何无忌也是一员有谋略的勇将。这三个人凑在一块儿,怎么能说他们干不出大事呢?”果然警报连连传来,先是吴甫之战死江乘,随后皇甫敷在罗洛桥战亡,而刘裕军中只损失了一个檀凭之,并且兵锋越发锐利。桓玄急忙让桓谦屯驻东陵,卞范之屯驻覆舟山的西面,两军共计两万人。刘裕率军来到覆舟山东面,令各军饱餐一顿,然后丢掉所有存粮,誓死作战。刘毅持长矛做先驱,刘裕也握刀随后接应,众将士踊跃冲入敌阵,以一当十,以十当百,呼声惊天动地。凑巧一阵顺风吹过,刘裕军趁风纵火。霎时烟焰蔽天,将桓谦、卞范之两军烧得焦头烂额,与鬼为邻。桓玄料知刘裕军不好对付,已先派殷仲文在石头城准备船只。一接到桓谦战败的消息,他就策马出都前往石头城,乘船逃往江南。刘裕乘胜长驱,直入建康。
刘裕入城安定民众后,让刘毅追捕桓玄,又让尚书王嘏率百官去迎进晋安帝,同时下令诛杀桓氏宗族。司徒王谧本是桓玄的爪牙,桓玄篡位时,王谧曾亲手把晋安帝的印玺夺去,捧给桓玄。众人都视他为罪魁,劝刘裕杀掉王谧,但是刘裕不答应。原来,刘裕少年孤贫时,王谧曾代他偿还债务,所以刘裕不忍心杀掉他,仍让他在朝中做事。王谧对刘裕大献殷勤,举荐刘裕统领扬州军事。刘裕一再推辞,任命王谧为侍中,兼任扬州刺史。感恩的王谧更是大力推举刘裕督领八州军事,兼任徐州刺史。这次,刘裕不再推辞。受任后,刘裕任命刘毅为青州刺史,何无忌为琅玡内史,孟昶为丹阳令,刘道规为义昌太守,并将所有军政,交由刘穆之审定。
与此同时,诸葛长民与趁机起事的历阳军民围攻刁逵。刁逵虽然逞刁,最终也是落得饮刀毙命的下场。
桓玄逃到寻阳,在刺史郭昶之的支持下,仍自称楚帝,威福依旧。随后听说刘毅率军追来,将到城下,桓玄惊慌失措,急忙派部将庾雅祖、何澹之堵住湓口,然后挟持晋安帝以及皇后王氏、穆帝后何氏西逃江陵。刘毅与何无忌、刘道规诸将在桑落洲大破何澹之的水军,夺下湓口、寻阳,然后派使者回去报捷。刘裕因为晋安帝被桓玄劫走,于是迎奉武陵王司马遵为大将军,请他入居东宫,同时令刘毅等人继续追击桓玄。
桓玄在江陵召集了两万多名荆州兵,挟持晋安帝东下。在峥嵘洲被刘毅军烧得一塌糊涂,狼狈的他慌忙改乘小船,带着晋安帝逃回江陵。桓玄的部将殷仲文向刘裕投降,带着两位皇后回京。跑回江陵的桓玄众叛亲离,只得乘夜逃往汉中。南郡太守王腾之、荆州别驾王康产将晋安帝迎入南郡府,不久又迁到江陵。
益州刺史毛璩有个侄子叫毛修之,是桓玄的屯骑校尉。毛修之诱骗桓玄去四川,桓玄听从他的建议西行。走到枚回洲,碰到几只从上游来的丧船,船头立着一员大将,与毛修之打了一个照面。大将厉声喝道:“你们船上有没有窝藏逆贼?”毛修之没有回答,桓玄却颤声说道:“朕是当今的新天子,哪里来的盗贼,敢在朕面前胡言乱语!”话还没说完,对面船上又跳出两员大将,搭弓上箭,将护在桓玄面前的人全部射倒。桓玄正惊慌失措,突然见数人持刀跃入自己的坐船,为首的正是刚刚问话的大将。桓玄惊骇地问道:“你……你们是什么人?竟敢对天子无礼!”那员大将应声道:“我们来杀天子的贼臣!”说到这里,只见刀光一闪,桓玄身首分离。这员大将正是益州督护冯迁。
益州刺史毛璩有个弟弟叫毛璠,在宁州担任刺史时病逝。毛璩请兄长毛祐之及参军费恬将弟弟的遗体带回故里,并派冯迁护丧。恰巧途中遇到桓玄的坐船,毛修之一声令下,冯迁一行人便一齐动手,杀死贼人桓玄。不用说,刚刚放箭的两员大将便是费恬、毛祐之了。冯迁砍下桓玄的首级,擒住桓玄的儿子桓升,杀死桓玄的族人桓石康、桓浚,然后令毛修之带着桓玄的首级并将桓升押往江陵。晋安帝封毛修之为骁骑将军,并将桓玄的首级挂在东市,颁诏大赦天下,唯独桓氏族人除外。
桓玄的侄子桓振逃到华容,召集了数千名党徒。得知刘毅退到寻阳,他立即袭击江陵城。躲在沮川的桓谦也纠众响应。江陵城内只有王腾之、王康产二人驻守,二人手下的将卒不多。一场恶战,王腾之、王康产战死。晋安帝当时正在江陵的行宫里,桓振持刀闯进来,正要一刀结果晋安帝的性命,幸亏桓谦及时赶来劝阻,他才罢手,向晋安帝跪拜而出。安葬桓玄后,桓谦率百官觐见安帝,先是把御玺还给他,然后撤换他的贴身侍卫,改用自己的党羽,并趁势攻取襄阳等城。
退驻寻阳的刘毅还以为逆贼已除,可以高枕无忧,哪知死灰复燃,又有二桓余孽袭取江陵。刘毅急忙令何无忌、刘道规二将讨伐二桓。大军走到马头,正碰上桓谦的人马。当下杀了一场,桓谦的部众败退,何无忌、刘道规直逼江陵。桓振令党徒冯该在杨林设伏,然后亲自率部众到灵溪迎战。何无忌仗着刚打完胜仗的锐气轻率进军,不料深陷埋伏,大败而还。幸亏刘敬宣及时接济他们粮草和船只,刘军才得以迅速恢复元气。
刘敬宣是刘牢之的儿子,他屡次想募兵讨伐桓玄,始终没能如愿。桓玄死后,刘敬宣投靠刘裕,刘裕任命他为晋陵太守,不久,又授他为江州刺史。因为刘毅大军去讨伐桓玄的余党,总想出力的刘敬宣便筹备舟械,随时接应刘军。
何无忌、刘道规得到援助后,再次进兵夏口。刘毅也督军攻入鲁城。等刘道规攻克偃月垒,两路大军会师,向巴陵进军。大军号令严整,沿途秋毫不犯,深得人心。桓振挟持晋安帝屯兵江津,派使者求和,说只有割让江、荆二州,才肯奉还天子。刘毅等人不答应。南阳太守鲁宗之,突然起兵袭击襄阳,桓振还军迎战,令桓谦、冯该留守江陵。桓谦派冯该驻守豫章口,后来得知冯该战败,桓谦立即弃城逃走。刘毅军径直驰入江陵,斩杀逆党卞范之等人。
这次晋安帝没被挟持走,仍在江陵。刘毅到行宫觐见晋安帝,晋安帝慰劳他一番,令他主持一切事宜。刘毅正打算追剿桓振和桓谦,刚巧桓振回军救援江陵,途中听说江陵城已经失守,部众霎时骇散,桓振只好逃到涢州。后来,桓振又袭击江陵,结果中了将军刘怀肃的埋伏,被一网打尽。桓氏余孽,只有桓谦逃到后秦。
晋安帝改元义熙,大赦天下。桓氏宗族中唯独桓冲的孙子桓胤得到赦免。晋安帝令他迁居新安,下令保存桓冲的宗祀,以保全功臣一脉。桓冲是桓玄的叔父,有功于晋室,曾被封为丰城公。刘裕令刘毅、刘道规留驻夏口,让何无忌护送晋安帝回建康。晋安帝回到建康,令百官复职,任命琅玡王司马德文为大司马,武陵王司马遵为太保,并且重赏刘裕、刘毅、何无忌、刘道规等功臣。
刘裕力辞官爵,乞求归乡。晋安帝不答应,派百官劝慰他。刘裕又请求在京外供职,于是晋安帝令他督管荆、司、梁、益、宁、雍、凉等十六州军事,并允准他回丹徒镇守。又封刘毅为左将军,何无忌为右将军,二人分别督管豫州、扬州的军事;刘道规为辅国将军,督管淮北的军事。