在刘邦起兵的同时,秦末农民战争中还有一支强大的力量,这就是原来楚国贵族的后代项羽和叔叔项梁,他们在吴中起兵,兵力很快达到了近万人。同时,其他被秦国灭掉的六国贵族后裔们也纷纷起兵,加入了灭秦的行列。
公元前208年,陈胜手下大将周章率军攻打戏水。燕、赵、齐、魏各国都自立为王。
但秦朝泗川郡监名叫平的率兵包围了丰邑。两天之后,刘邦率众出城与秦军交战,打败了秦军。刘邦命雍齿守卫丰邑,自己率领部队到薛县去。泗川郡守壮在薛县被打败,逃到戚县,刘邦的左司马曹无伤抓获泗川郡守壮并杀了他。刘邦把军队撤到亢父,一直到方与,没有发生战斗。陈王胜派魏国人周市来夺取土地。周市派人告诉雍齿说:丰邑是过去魏国国都迁来的地方,现在魏地已经平定的有几十座城,你如果归降魏国,魏国就封你为侯驻守丰邑。如果不归降,我就要屠戮丰邑。雍齿本来就不愿意归属于刘邦,等到魏国来招降了,立刻就反叛了刘邦,为魏国守卫丰邑。刘邦带兵攻打丰邑,没有攻下,后因生病退兵回到沛县。听说东阳县的宁君、秦嘉立景驹做了代理王,驻守在留县,于是刘邦前去投奔他,想向他借兵去攻打丰邑。这时候秦朝将领章邯正在追击陈胜的军队,章邯的别将司马带兵向北平定楚地,屠戮了相县,到了砀县。东阳宁君、刘邦领兵向西,和章邯的别将司马在萧县西交战,战势不利,就退回来收集兵卒聚集在留县,然后带兵攻打砀县,三天就攻下此城。于是刘邦聚集砀县的兵卒共五六千人攻下下邑,后退兵驻扎在丰邑。听说项梁在薛县,刘邦就带着一百多随从骑兵前去见项梁。项梁又给刘邦增加了5000兵士和五大夫级的将领10人。刘邦回来后,又带兵去攻打丰邑。
刘邦跟从项梁一个多月,项羽已经攻下襄城回来了。项梁把各路将领全部召到薛县,听说陈胜被车夫庄贾所杀,因而立楚国后代怀王的孙子熊心为楚王,建都盱台,项梁号称武信君。驻守几个月后,项梁向北攻打亢父,援救东阿,击败了秦军。另外,项梁派刘邦、项羽攻下咸阳。项梁的军队驻扎在濮阳县东边和秦军交战,打败了秦军。
战败的秦军重振旗鼓,在濮阳城周围引水坚守。楚军久攻不下,撤兵去攻定陶,没有攻下。刘邦和项羽向西夺取土地,到了雍丘城下,和秦军交战,大败秦军,斩杀李由。又返回攻打外黄,没有攻下。
项梁两次打败秦军,露出骄傲的神色。宋义进谏,项梁不听。秦朝给章邯增派了军队,趁着黑夜袭击项梁军队。为了避免打草惊蛇,章邯让士兵口里都衔着一根横木棍,结果在定陶打败了项梁的军队,项梁战死。这时,刘邦和项羽正在攻打陈留,听说项梁已死,就带兵和吕臣一起向东进军。吕臣的军队驻扎在彭城的东面,项羽的军队驻扎在彭城的西面,刘邦的军队驻扎在砀县。章邯打败了项梁的军队之后,就以为楚地的军队不值得担忧,于是渡过黄河,向北进攻赵国,大败赵军。正当这个时候,赵歇立为赵王,秦将王离在巨鹿城包围了赵歇的军队,这就是所谓的河北军。
公元前207年,楚怀王把都城从盱台迁到彭城,把吕臣、项羽的军队合在一起由他亲自率领。他任命刘邦为砀郡太守,封为武安侯,统率砀郡的部队,封项羽为长安侯,号称鲁公;吕臣担任司徒,他的父亲吕青担任令君。
这时,因赵国几次请求援救,怀王就任命宋义为上将军,项羽为次将,范增为末将,向北进兵救赵,然后向西取咸阳。命令刘邦进军关中。楚怀王和诸将相约,谁先进入函谷关平定关中,就让谁在关中做王。
公元前206年8月,刘邦攻入武关,向咸阳逼近。秦相赵高杀死秦二世,派人向刘邦求和,被刘邦拒绝。同年9月,秦王子婴即位,他诛灭赵高,派兵在崤关抵挡刘邦。刘邦率军绕过崤关向秦国进攻,在蓝田之南打败秦军,接着到蓝田又大破秦军。10月,刘邦即进抵咸阳东郊灞上。秦王子婴被迫乘坐素车白马,用带子系着颈,捧着玺印向刘邦投降。秦王朝灭亡。
10月,刘邦攻入咸阳后,以关中王自居,准备好好享受一番。樊哙提醒刘邦安于享乐将重蹈秦的覆辙,他不以为然。张良再一次进谏说:秦王朝的统治残暴无道,所以你才能进入关中。你若想为天下除去残暴,自己首先就必须以朴素为资。现在刚刚入秦,却安于享乐,这并非大丈夫所为,况且,'忠言逆耳利于行,良药苦口利于病'。樊哙讲的话虽不合你意,但为了坐稳天下,希望你还是听从他的劝告。于是,刘邦听从了张良、樊哙等人的建议,乃封秦重宝财物府库,还军灞上。刘邦到达灞上之后,便召集当地的名士,和他们约法三章:杀人者死,伤人及盗抵罪。其他秦朝的苛刻法制一律废除,这条规定顺乎民心。