刘邦兵败逃离荥阳,一路狂奔,身边只有滕公一人逃到修武。修武是韩信,张耳的军营,刘邦只称是汉王使者,骗过卫兵,直奔军营,夺了韩信,张耳的军权。派张耳留守赵地招收兵卒,派韩信东进攻打齐国。
刘邦取得了韩信的军队,重新振作起来,他率军南下,临近黄河,在小修武的南面犒劳部队,准备跟项羽再战。郎中郑忠劝说刘邦说:项羽士气正盛,这时出战没有必胜的可能,应该加深壕沟,增高壁垒坚守,不与楚军正面作战。
刘邦听信了郑中的计谋,派卢绾,刘贾率步兵两万人,骑兵数百名渡过白马津,进入楚地,携同彭越的军队在燕县城西打败了楚军,攻下了梁地十多座城,截断了楚军粮道。
项羽一直想与刘邦决战,刘邦却深挖壕沟,加高营垒不与楚军决战。彭越大军断了楚粮道,又攻下梁地十几座城。项羽想要平定梁地,又担心刘邦偷袭他的营寨,就对大司马曹咎说:我带兵收复梁地,你们一定要小心守住成皋。如果汉军挑战,千万不要应战,只要他们不东进就可以了。我十五天之内一定平定梁地,回头再与将军们会合。
项羽率兵去收复梁地,很快就把丢失的城池收回来。这期间,汉军果然多次向楚军挑战,楚军都坚守不出战。汉军派人阵前辱骂,接连五六天。大司马曹咎气愤至极,忍不住领兵横渡汜水应战。楚军刚刚渡过一半,汉军突然杀了过来,楚军大败,把楚军囤积的金玉财物抢劫一空,军队也被打散了。大司马曹咎,在汜水岸边自杀了。
项羽平定梁地,到达睢阳,听说大司马曹咎兵败,就率兵赶回来,但成皋已破。此时汉军把楚将钟离昧围困在荥阳东面。楚军赶到,解了荥阳之围。此时齐国已被韩信打败,齐王田广逃走。而楚将龙且援救齐国的军队也被韩信打败,二十万大军覆灭。项羽有些惊慌。
楚汉两军久久相持不下,胜负未决,军人厌战,民不聊生。项羽要求与刘邦单挑决一雌雄,隔着广武涧相互喊话,刘邦列举项羽的十条罪状,使项羽大怒,令预先埋伏的弓箭手开弓射中了刘邦,刘邦因箭伤卧床不起,为了稳定军心,张良强请刘邦巡视部队,慰问将士。
刘邦病愈后,西行入关,来到栎阳,慰问当地父老,摆设酒席,并杀死了原塞王司马欣,把他的头悬挂在木杆上示众。刘邦在栎阳停留四天,又回到军中,部队驻扎在广武。关中的军队出关参战的有所增加,刘邦的军事力量有所加强。
彭越又重新驻扎在梁地,来往袭击骚扰楚军,断绝楚军的粮食供给。齐将田横前往梁地协助彭越抗楚。项羽多次攻击彭越的军队,没有取胜。此时齐王韩信也率兵攻打楚军。项羽看自己兵力很难打败刘邦,就与刘邦约定,平分天下,以鸿沟为界,鸿沟以西的地方划归汉,鸿沟以东的地方划归楚。项羽送回了刘邦的家属,双方罢兵,各自回到自己的营地。
楚与汉签完平分天下的和约,项羽便率领楚军东归。刘邦也想率军西归,但张良,陈平不主张撤兵,应当趁楚军兵疲粮尽之时消灭他,一统天下。刘邦采纳了张良,陈平的建议,迅速调整队伍追击项羽,一直追到阳夏南面才让部队停下来。并按刘邦与彭越,韩信约定的日期会合,共同攻击楚军。
当刘邦到达固陵时,韩信,彭越却没有按约定的时间会合。楚军调头迎击汉把汉军打个大败,刘邦逃回营垒,深挖壕沟坚守不出。刘邦很生气,对张良说:已经约定好了,韩信,彭越却不来会合,害的我吃了败仗。