一日早晨,諸將晉見宋義,項羽矯楚懷王令,拔劍斬宋義。諸將共立項羽為假上將軍,遣桓楚向楚懷王報命。楚懷王真除項羽為上將軍。項羽引兵渡河,破釜,沉舟,燒舍,隻帶三天軍糧,以示有進無退。楚軍圍秦軍於钜鹿,九度合戰,大獲全勝,時為公元前207年初。《史記·項羽本紀》雲:“當是時,楚兵冠諸侯。諸侯軍救钜鹿下者十餘壁,莫敢縱兵。及楚擊秦,諸將皆從壁上觀。楚戰士無不一以當十,楚兵呼聲動天,諸侯軍無不人人惴恐。於是,已破秦軍,項羽召見諸侯將,入轅門,無不膝行而前,莫敢仰視。項羽由是始為諸侯上將軍,諸侯皆屬焉。”
項羽軍進擊章邯軍於濁漳水南,大破之。章邯請求與項羽為盟相約,實即投誠。項羽留章邯於楚軍中,以防反側。命章邯部屬長史司馬欣為上將軍,將秦軍為前導西行。進至新安(在今河南澠池東),發現秦軍吏卒似有攜貳之意,項羽命楚軍連夜包圍並擊斃、坑殺秦兵20餘萬人。坑殺降卒是秦人發明的戰法,這時輪到秦人自己成為坑殺的對象了。沒有被坑殺的,隻有章邯、長史司馬欣和都尉董翳。趙高已為中丞相,不知足,迫秦二世自殺,欲自立為帝。無奈百官無擁戴之意,於是立秦二世兄子子嬰。子嬰稱病不臨朝,誘趙高入宮,命宦官韓談刺殺之,夷其三族。
劉邦兵少勢弱,受命西征,屢戰屢敗。此人既不儒雅,又不威武,但能禮賢下士,知人善任,因而屢蹶屢興,部屬逐漸變少為多。
劉邦舍北趨南,避實擊虛。韓王成與劉邦交好,遣張良送劉邦至關中。劉邦用張良所獻計,先後誘降秦南陽守和秦武關將,北上與秦軍戰於藍田。劉邦多張疑兵旗幟,嚴禁士卒擄掠。秦人鬥誌冰消,兩戰皆敗,從此潰不成軍。當項羽軍未到新安時,劉邦軍正直趨鹹陽。是年十月,子嬰乘素車白馬,奉皇帝璽符,以組係頸,出宮到枳道(或作“軹道”,在今陝西西安東北),向劉邦投降。劉邦入鹹陽,一頭紮進秦宮裏去,樂不思出。樊噲諫阻,劉邦不聽。《史記·留侯世家》記張良繼樊噲諫曰:“夫秦為無道,故沛公得至此。夫為天下除殘賊,宜縞素為資。今始入秦,即安其樂,此所謂‘助桀為虐’。且‘忠言逆耳利於行,毒藥苦口利於病’,願沛公聽樊噲言。”
劉邦本來既貪財又好色,但他能忍小謀大,聽了張良的忠言,當即退出秦宮,領兵到霸上(在今陝西西安東)駐紮,下令守護宮室,封閉府庫,這正是他的過人之處。後來項羽的謀主範增聽說劉邦如此,斷言“此其誌不在小”。
劉邦召集當地的長老、豪傑,宣布“約法三章”:其一為,殺人者處死,其二、其三為傷人者、盜物者抵罪。此外,諸多苛細的秦法概予廢除。要求官吏各司其職,民人各安其居,派出自己的官吏會同秦地的官吏遍巡關中縣鄉,曉諭周知。《史記·高祖本紀》雲,“秦人大喜,爭持牛羊、酒食獻饗軍士”,劉邦辭讓不受,宣稱“不欲費人”。於是,“人又益喜,唯恐沛公不為秦王”。
項羽在函穀關外聽說劉邦已到鹹陽,函穀關內有劉邦的守軍,大怒,揮師破關而入,長驅而西,直到鴻門(在今陝西臨潼東北)才駐紮下來。項羽軍40萬,劉邦軍10萬,彼此強弱懸殊。劉邦左司馬曹無傷為了討好項羽,派人對項羽說,劉邦要在關中稱王,以子嬰為相,獨占秦宮的珍寶。範增被項羽尊為“亞父”,這時極力敦促項羽盡快收拾劉邦,以絕後患。項羽傳令全軍:次日一早就吃好吃飽,去打垮沛公的部隊!一場惡戰即將爆發,勝負不問可知。然而,它卻因項羽季父左尹項伯與張良為生死之交而暫時化解了。
秦末,項伯曾有難,受庇於張良,得免一死,由此對張良感恩圖報。項伯知道次日大戰劉邦必敗,張良必死,於心不忍。於是連夜騎馬跑到劉邦軍中,秘密會見了張良,要把張良帶走。張良問明原委,表示一定要向沛公告辭,否則不義。張良問劉邦是否確實有稱王關中的打算,劉邦坦然承認說,那是臭小子給我出的餿主意,我不知怎麼竟聽了他的。張良問,大王能抵擋項王嗎?劉邦說,當然抵擋不住,那可怎麼辦呢?張良向劉邦介紹了自己與項伯的交誼以及項伯密告的消息,請劉邦對項伯說明絕無背叛項羽之心。劉邦問,項伯和您哪個歲數大些?張良說,項伯比我年長。劉邦說,趕快請項伯來,我得像對待兄長那樣對待項伯。項伯見了劉邦,劉邦向項伯敬酒祝壽,約為兒女親家。雙方一下就變得如此親熱,這也是劉邦的過人之處。然後,劉邦說,我進了關,秋毫不敢沾手,等著上將軍來。派兵守函穀關,隻是怕強盜進出,別無他意。我日日夜夜盼著上將軍駕到,難道會反叛嗎?請您務必把我的真心實意向上將軍轉達。項伯請劉邦次日一早到鴻門麵見項羽,隨即趕回項羽軍中,把劉邦的話一五一十向項羽報告,對項羽說,人家若不先擊破關中的秦軍,你難道就這麼容易進來嗎?人家有大功,你卻去打他,這是不義的,不如善待沛公。項羽耳軟心軟,當下就同意了。
次日便是“鴻門之宴”,《史記·項羽本紀》有精妙的記述,原文如下: