降服南陽以後,劉邦領兵西進。由於南陽郡的示範作用,沿途所有的城邑都主動歸附了沛公。軍隊開到丹水,威鰓,王陵在西陵投降劉邦。這兩人後來都成為劉邦的得力大將。沛公回軍攻打胡陽,遇到了鄱君派來的援軍。兵合一處、隨即降服析縣和酈縣。為了解關中情況,沛公劉邦派寧昌出使秦地。還沒等到寧昌回來,東方傳來訊息:秦朝大將章邯率領軍隊投降了項羽。
項羽和宋義接受楚懷王的命令前去援救趙國。之後,項羽殺了不執行命令的宋義,成為上將軍。於是各位將領都開始服從項羽的指揮。項羽率軍打垮了秦將王離,又降服了章邯,眾諸侯都跟從了項羽。沒多久,趙高就殺了秦二世,派人來跟沛公訂立盟約,想分割關中的土地,各自稱王。沛公覺得這是個陰謀,就採取了張良的計策,派酈其食和陸賈去說服秦國的將領,並用豐厚的待遇引誘他們,同時又派人前去偷襲,佔領了武關。為了迷惑秦軍,沛公擺設了很多旗幟,顯示他的軍隊眾多。沛公交代手下的將士,要善待秦地的無辜平民。漢軍經過的地方,從未出現過燒殺搶掠的現象,秦朝統治區的民眾都對沛公產生了好感。後來,沛公在藍田城南和城北,接連與秦軍打了兩仗,徹底打敗了秦軍。
漢王元年(公元前206年)十月、沛公的車隊首先來到灞上地區。秦王子嬰坐著白馬拉著的素車,脖子上繫著絲帶、封存了皇上的玉璽符節,出城來向沛公投降,秦朝正式滅亡。
將領中有人提議要殺掉子嬰,沛公說:"那怎麼行呢?當初懷王派我人關,就是因為我忠厚老實,能寬容待人。現在他前來向我歸降,我要是再殺他、既不仁義,也不吉祥!”就讓官吏們看著秦王,接著率軍進入咸陽城。
沛公入城後、看到秦國的宮室富麗堂皇,還堆滿了金銀財寶,就想進去休息。張良和樊噲阻止了他、還讓沛公封存所有東西,從城內撤出大軍,駐紮城外灞上。然後沛公又召集秦地各縣有名望的父老豪傑們,對他們說:“父老鄉親們!你們遭受秦朝暴政苛法的迫害已經很久了,還說不得一句對朝廷不滿的話,不然就被誅滅三族哪怕是在街頭巷尾聚眾談論事情、都得被斬頭示眾。我曾與各位將領有過約定,誰先進關就可在關中為王,所以我理應在這裡稱王。現在我與諸位父老訂立盟約,也就是三條法律:殺人者要處死:傷害人或偷盜搶奪他人財物的人,也要論罪懲辦;廢除秦朝的苛捐雜稅,各級官吏和地方政府都各自按原職務堅守崗位,執行公務。你們不必擔心害怕!我消滅秦朝、不是為了禍害你們。而是為你們除掉禍害、將你們從水深火熱之中解救出來。另外,我在灞上駐兵,是為了等待其他諸侯的到來,讓大家一起來制定章法,沒有別的意思。”
隨後,劉邦派人跟著秦朝官吏們到各縣鄉城邑巡行,張貼告示,讓約法三章家喻戶曉。秦地的民眾十分高興,爭搶著送來牛羊酒食慰問沛公的軍隊將士。沛公再三推辭,不肯收下,並對他們說:“現在倉庫裡還有很多糧食,戰士們也沒有捱餓,我不想給父老鄉親們添麻煩,請大家不要破費了!”民眾聽後,覺得沛公真能體恤百姓,更加欣喜,唯恐他不在秦地稱王。
有人給沛公出主意說:“秦國非常富有,地理條件又好。我聽說秦將章邯已經投降了項羽。項羽把他封為雍王,而且想讓他在關中稱王。他們要是來關中,恐怕情況就會對您不利了!您應該趕緊派人守住雨谷關,不讓諸侯們的軍隊進來,然後再在此地徵集一些士兵,增強軍隊的實力,準備將來抗擊他們!”沛公聽從了他的建議,立即行事。
項羽率領軍隊來到函谷關,發現咸陽城門已經被沛公關閉了。此時他又聽說沛公已經平定了關中,並且想在關中稱王。項羽非常憤怒,就立即派黥布率軍攻破了函谷關。