晉元興二年(403)九月,桓玄逼安帝封他為楚王,見事情辦得很順利,朝野內外也沒有反對的聲音,於是他膽子更大起來,準備當皇帝。他問桓謙如果他當皇帝,會不會有實權人物反對。桓謙說:「其他人都不敢反對,只有劉裕這個人我不敢說。」
桓玄讓桓謙去試探劉裕,劉裕對桓謙說他雙手贊成桓玄當皇帝。桓謙很高興,趕回來告訴桓玄。於是桓玄立刻行動,經過一番安排之後,帶著文武百官入內宮,讓安帝禪讓。安帝本是個白痴,自然無話,於是由卞范之擬禪讓詔,安帝簽了個字,司徒王謐奉上玉璽。桓玄登基成為皇帝,國號為楚。桓玄當皇帝後,把他的親信都任命到實權職位,桓修的弟弟桓弘為青州刺史,刁逵為豫州刺史,郭昶之為江州刺史,劉裕也因為對桓玄表示過擁戴,被封為中軍將軍。桓玄還認為劉裕是個難得的軍事將領,以後國家少不了要用劉裕的地方,於是經常厚賞劉裕,並經常召見劉裕一起喝酒遊玩,拉攏感情。
劉裕早就派何無忌拉攏了一大批中下級軍官和地方官,打算起兵反楚復晉,但被桓玄留在京中,一直不能脫身。劉裕以母親身體有病需要照顧為名向桓玄請假。桓玄批准劉裕走後不久,他又後悔了,急忙派人去追劉裕,哪知道劉裕挑了一匹快馬,一路玩命地南奔,桓玄的人根本就追不上。這哪是回家探母,分明是逃命。桓玄聽說劉裕跑得這麼快,心裡隱隱感覺不安,但還心存僥倖,沒想到幾天後他的擔心成為現實。劉裕在京口起兵了!
劉裕一路狂奔,回到京口,這時京口的何無忌已經聯絡了一大批北府兵舊將和其他反楚的中下級官吏,劉裕被推為起義首領。劉裕安排下三路人馬,分別進攻青州刺史桓弘,徐、兗二州刺史桓修和豫州刺史刁逵。
京口這一路,劉裕和何無忌化裝成欽差大臣帶著一百多人來到桓修府中,等恆修出來迎接時,一刀將桓修劈死,因為京口士兵大多為北府舊部,是劉裕和何無忌的老部下,所以都投降了劉裕。司馬刁弘率自己的軍隊來戰,劉裕很快將刁弘擊敗,收降其部下,佔了徐、兗二州。
廣陵這一路,劉毅在桓弘手下做參軍,劉道規為參軍,孟昶為主簿,三個人一起邀請桓弘出去打獵。桓弘未加防備,一口答應。在打獵的那天早上。三個人帶上打獵的刀槍劍戟直接走到桓弘的客廳,桓弘正在吃早飯,看見三個人拿著兵器還納悶他們怎麼這麼著急。哪知道三個人一齊圍上來用這些打獵的武器把桓弘給殺了,也收降了青州的士兵。劉道規據守廣陵,劉毅和孟昶帶兵去京口和劉裕會合。劉裕讓孟昶守京口,然後挑出一萬多精兵,攻向京師。
歷陽這一路,諸葛長民卻被刁逵先發制人,反被擒獲。刁逵把諸葛長民等人裝入囚車中送往京城。
桓玄聽說劉裕等人造反,不由大驚道:「劉裕是當世英雄,劉毅為人傑,何無忌的軍事才能不亞於他的舅舅劉牢之。這三個又一起聯合起來反對我,我就要敗啦!」這時桓謙大哭闖入,一定要請桓玄出兵擊殺劉裕,為二弟桓弘報仇。
桓玄道:「劉裕雖然兵少,但這個人打仗很厲害,手中又握有善戰的北府兵,如果出兵對決,一旦戰敗,大勢去矣!不如把所有的軍隊都收縮到覆舟山一帶防守。劉裕行軍數百里不見一兵一卒,忽在覆舟山見我數倍於他的大軍,軍心必懼。我們堅守不出,劉裕的軍隊久攻不下,軍心會更加動搖。到時,劉裕自然會退兵。」但桓謙一定要桓玄出擊,為二弟報仇。桓玄被他纏得沒有辦法,就派頓丘太守吳甫之、右衛將軍皇甫敷先後北上去攻劉裕。
吳甫之率三萬兵在江乘與劉裕的部隊相遇。吳甫之先擊敗前鋒何無忌,但劉裕的中軍隨後殺到,又大敗吳甫之的部隊,並殺死吳甫之。劉裕帶軍隊追殺吳甫之的殘兵,追到羅落橋的時候,皇甫敷率領五萬大軍趕到。兩軍混戰一番後,劉裕因為兵少,被楚軍分割包圍,劉裕手下將軍檀憑之被射死。在這危急時刻,劉裕帶一小隊人馬,奮力殺向皇甫敷,把皇甫敷殺死。皇甫敷死後,形勢頓時逆轉,失去主將的楚兵紛紛撤退,劉裕趁勢掩殺,沿途又徵招降兵,很快壯大成為一支三萬人的隊伍。
桓玄急忙任命桓謙為征討都督,令游擊將軍何澹之率兩萬人守東陵,又命卞范之率一萬兵防守覆舟山,作為東陵後援。劉裕進兵至東陵,很快擊潰桓謙的軍隊,接著又攻下覆舟山。桓謙、何澹之、卞范之逃回京城,對桓玄道:「劉裕的兵力很強,漫山遍野,不知有多少。你快逃吧!」桓玄也被嚇壞了,帶著三個人和數千親信及士兵挾持著晉安帝和司馬德文倉皇逃出京城。前相國參軍胡籓拉住桓玄的馬籠頭道:「現在你還有八百羽林軍射手,身邊也有數千人,為什麼不去和劉裕決一死戰呢?今天你離開京城,就再沒有回到京城的那一天了。」
桓玄無以作答,只以鞭指了指天,表示這是天意,便率眾人逃到石頭城,又從石頭城乘船西逃。一路上桓玄心情難受,剛當上皇帝沒幾天就被人家趕下台,這皇帝做的還不如安帝那個白痴。他難受得連一口飯都咽不下去,還是他的兒子桓昇替他撫胸才得以咽下。等到了潯陽,江州刺史郭昶之迎接桓玄,桓玄遂命何澹之和郭昶之守在湓口,自己與桓謙、卞范之等人,脅持晉安帝和司馬德文退回江陵。
劉裕的軍隊到了建康,王謐率京中百官出城來迎。劉裕入城後派劉毅率何無忌、劉道規等率一萬水軍繼續追剿桓玄,又把城中沒來得逃走的桓氏宗族餘黨全部殺死。有人向劉裕告發說:「王謐幫助桓玄篡位。當年桓玄篡晉時,王謐還親手解下晉帝的璽綬。」
王謐當年從刁逵手中救下劉裕,後來不但一直資助劉裕,還激勵他事業上進,劉裕一直記在心裡,把王謐當做恩人,所以對這件事睜一眼閉一眼,並沒有去加罪王謐。劉裕執掌朝綱後,到處尋求人才,先後重用劉穆之、胡籓、臧熹等人,又整理綱紀,打擊豪強,嚴肅法律,穩定了社會。
不久諸葛長民也回來了。原來,諸葛長民被押到當利口的時候,傳來消息,桓玄敗出京城。押送諸葛長民的士兵也起義反對桓玄,打開囚車放出諸葛長民等人,諸葛長民又潛回到歷陽,發動兵變。刁逵在兵變中失敗,棄城而走,後來被其部下擒回,反被諸葛長民用檻車押送到京城。劉裕以前被刁逵欺負過,所以連審都沒審,就讓人把刁逵殺了。
擊敗桓玄入京後,按道理應當封賞功臣。但皇帝不在了,封官的事就只好互相推選吧。王謐和大家推舉劉裕為揚州刺史。劉裕一再拒絕,最後以王謐為侍中,領司徒,揚州刺史,錄尚書事。大家又推舉劉裕為使持節,都督揚、徐、兗、豫、青、冀、幽、並八州諸軍事,徐州刺史,推選劉毅為青州刺史,何無忌為琅琊內史,孟昶為丹陽尹,劉道規為義昌太守,諸葛長民為宣城內史。劉敬宣和司馬休之聽說劉裕打了勝仗,起義成功,也從南燕回國。畢竟劉裕當年是跟著劉牢之混起來的,看在劉牢之的面子上,劉裕讓大家推選劉牢之的兒子劉敬宣為晉陵太守,又任命司馬休之為會稽內史。
劉毅、何無忌、劉道規的晉軍在桑落洲與桓玄的戰將何澹之激戰,這時桓玄的軍隊還很多,雙方打了很多天不分勝負。何澹之想了個自以為是的計策,他悄悄地移到郭昶之艦中,讓自己的旗艦沖向敵陣,以誘晉艦來圍攻,這樣其他楚艦則可以仗著艦多兵多對晉艦進行反包圍。但他擔心泄密,並沒有把這個事通知到每條船上,而是憋在自己肚子里不說。這就為後來的敗仗埋下了伏筆。
晉軍很快把這隻旗艦攻下。何無忌一馬當先,攻入旗艦中,卻不見主帥何澹之。何無忌方知上當,這時候楚艦已經從四面八方將晉艦包圍,何無忌急中生智,出來喊道:「何澹之已被我生擒了,你們還不投降?」
楚軍見旗艦被攻下,所以都相信何無忌擒住了他們的主帥,皆無鬥志,紛紛撤退。晉軍乘勢追擊,楚軍大敗。何澹之從郭昶之的艦中急得跳出來大喊:「我在這裡!」竟然無人注意,楚軍大敗。何澹之和郭昶之只好棄艦而逃。晉軍遂攻克湓口,進據潯陽,又從潯陽繼續進兵。
桓玄又派苻宏為前鋒,率荊州水軍二萬阻擋劉毅。劉毅的軍隊只有一萬,聽說桓玄船高兵多,便打算回潯陽堅守。劉道規道:「敵眾我寡,即使退到潯陽,也難堅守。不如乘勝進攻,一鼓作氣,與之死戰。兩軍決戰,雄者克!不在兵多!」何無忌也不同意退兵。
劉毅於是繼續進軍,在崢嶸洲與桓玄的水軍遭遇後,兩軍混戰。由於晉軍兵少,又處於下游,開戰後處於不利的局面,開始後撤。但這個時候忽然颳起了東風,而且這場風颳得特別猛烈。水軍交戰,風向特別重要。楚軍雖然處於上流但遇到強烈的逆風,船隻都被吹得後退。晉軍趁勢掩殺,並同時射出火箭放起火來。楚船紛紛中箭著火,風助火勢,越來越大,楚軍登時潰敗。桓玄見此情景,再一次指天長嘆道:「這是上天亡我啊!」桓玄乘小船逃走,殷仲文投降晉軍。
桓玄逃回江陵後,苻宏、馮該等將請桓玄整兵再戰。但楚軍上下,大多將士充滿悲觀情緒,