汉王刘邦元年(公元前206年)四月,刘邦率所部三万人经子午谷去南郑就国,刘邦接受张良的建议,烧绝所过栈道,示项羽无东归之意。
六月,田荣杀齐王市自立为齐王,命彭越击楚,项羽命肖公角率军击彭越,为彭越击败,田荣已威胁楚国的安全。
次年正月,项羽大破齐田荣军于城阳(山东鄄城东南),田荣逃往平原(山东平原南),为百姓所杀。项羽又立田假为齐王,进军至北海(山东东北部),“烧夷城廓、室屋、坑田荣降卒,俘虏其老弱妇女,所过多所残灭,齐民相聚叛之,”这时刘邦已东出故道,还定三秦,项羽“虽闻汉东,既击齐,欲遂破之而后击汉”,所以没有还军,仍留齐地。十月间,派人杀义帝。刘邦为义帝发丧,号召诸侯共击项羽,为义帝报仇。四月,刘邦率诸侯兵五十六万人,趁项羽留齐未返、楚地防守薄弱,一举攻破彭城。彭越率三万人归汉,刘邦拜彭越为魏相国,命他率军略定梁地。
项羽得知刘邦攻占彭城,留诸将继续击齐,自己急率精兵三万还救彭城,大破汉军。仅被赶入谷水、水而死的即达十余万人。其余汉军悉数南逃,楚军追击至灵璧东睢水,汉军被挤入水的又十余万人,睢水为之不流。刘邦退守荥阳,诸侯兵又纷纷背汉向楚。但项羽未立即派大军西追刘邦。
田荣叛于北,刘邦反于西,一开始就是两面作战的态势,但田荣并吞三齐,齐地又紧连彭城,已直接威胁项王腹地的安全,所以项羽先齐后汉亦未可厚非。但要改变局势,必须采取各个击破、速战速决的战略方针。项羽未能掌握此点。尤其是项羽对齐地采取烧杀政策,导致齐军散而复聚,齐民奋力抵抗,给了齐王可乘之机;项羽在大破田荣军后,未能暂时放下北线,转用主力于西线,所以刘邦才得以集中五十六万诸侯兵,一举攻占彭城。在击齐时,只派一个仅当过吴县令的郑昌为韩王,去抗击刘邦,是严重失误,使刘邦能在很短时间内尽占黄河南北地区。
项羽还救彭城是一次成功的战略反击,部队精悍,行动快速,使刘邦猝不及防;以肖县、彭城为主要突击方向也非常恰当,从背后突击刘邦军,抓住了刘邦的弱点;同时还切断了刘邦的后方联络线,大大影响了刘邦军队的士气,水、谷水等地障,也有利于在彭城地区歼灭刘邦等。项羽的战役追击也很出色,以快速的行动截击刘邦军于睢水北岸,又歼灭其十余万人,连刘邦本人也几乎被俘。可惜的是项羽没有把战役追击发展为战略追击,这是项羽在战略上的又一关键性错误。当时刘邦逃出战场后,只有一些残兵败将随他返回荥阳。如果项羽不满足于收复彭城,派出主力实施战略追击,不给刘邦以喘息的时间,刘邦是难以在荥阳站住脚的;如果楚军长驱直入,至少关东可以复为项羽所有,加上诸侯背汉向楚,优势和主动权将重新为项羽所掌握。