荥阳大败后,刘邦仓皇逃回关中。他从关中征集到一批兵员,打算夺下成皋。谋士辕生认为这不是善策,建议刘邦派兵出武关(今陕西商南东南),调动楚军南下,减轻汉荥阳守军的压力;同时,让韩信加紧经营北方战场,迫使楚军分散兵力。刘邦欣然采纳这一计策,率军经武关出宛(今河南南阳)、叶(今河南叶县)之间,与英布配合展开攻势;与此同时,韩信也率部由赵地南下,直抵黄河北岸,与刘邦及荥阳汉军互相策应。汉军的行动果然调动了项羽的南下。这时刘邦却又转攻为守,避免同楚军进行决战,而让彭越加强对楚后方的袭击,彭越不失所望,进展迅速,攻占了要地下邳(今江苏睢宁西北),直接给楚都彭城造成威胁。项羽首尾不能兼顾,被迫回师东击彭越,刘邦乘机收复了成皋。
项羽击退彭越后,立即挥师西进,对刘邦发动第二次攻势,攻占荥阳,再夺成皋,并继续西进,抵达今河南巩县一带。刘邦仓猝北渡黄河,逃到小修武(今河南获嘉东),在那里,刘邦征调了韩信的大部分部队,以支撑危局,增强正面的防御。刘邦深知项羽的厉害,这时便命汉军一部拒守于巩(今河南巩县西南),一部屯驻小修武,深沟高垒,不与楚军交锋。同时派韩信组建新军东向击齐,继续开辟北方战场。又命刘贾率领两万人马从白马津(今河南滑县北,旧黄河渡口)渡河,深入楚地,协助彭越,扰乱楚军后方,截断楚军粮道。彭越得到刘贾这支生力军的支援,很快攻占了睢阳(今河南商丘南)、外黄(今河南杞县东北)等十七座城池。彭越、韩信的军事行动,给项羽侧背造成严重的威胁,迫使项羽停止正面战场的攻势,再次回师攻打彭越。项羽临行前,告诫成皋守将曹咎说:“小心坚守成皋,即使汉军挑战,也千万不要出击,只要能阻止汉军东进,我十五日内一定击败彭越,然后再与将军会师。”项羽很快收复了十七座城池,但没有能够消灭彭越的游军,它继续在威胁楚的后方。
这边,刘邦听取谋士郦食其的建议,乘项羽东去之机,反攻成皋。守将曹咎开始还遵照项羽的告诫,坚守不出,但是经不起汉军连日的辱骂和挑战,一怒之下,率军出击。刘邦见激将法奏效,便运用半渡击之的战法,大破曹咎所部楚军于汜水之上,曹咎兵败自杀,汉军乘机再夺成皋,并乘胜推进到广武(今荥阳东北)一线,收敖仓积粟以充军用,并在荥阳以东包围了楚将钟离昧部。
项羽听到成皋失守,大惊失色,急忙由睢阳带领主力返回,同汉军争夺成皋,与汉军对峙于广武,欲与刘邦决一雌雄。可是汉军依据险要地形,坚守不战。双方对峙数月,项羽无计可施。这时适逢韩信攻占临淄,齐地战事吃紧,项羽不得已只好派龙且带兵二十万前往救齐,这就更加减弱了正面战场的进攻力量。两个月后,韩信在潍水全歼了龙且的部队,平定齐国,使项羽的处境更趋困难。又过了几个月,楚军粮食缺乏,既不能进,又不能退,白白地消耗了力量,完全陷入了被动。这时,汉军韩信部已经破魏,破赵,降燕,平定三齐,占领了楚的东方和北方的大部地区,完成了对楚的战略包围。彭越的游军则不断扰乱楚军后方,攻占了昌邑(今山东金乡西)等二十多座城池,并多次截断楚军的补给线。英布所部在淮南也有所发展。项羽腹背受敌,丧失了主动,陷于一筹莫展的境地。双方强弱形势已发生根本的变化。项羽见大势尽去,遂被迫与刘邦议和,以鸿沟为界,中分天下,而后引兵东归。成皋之战以汉胜楚败而告终。
?成皋之战历时两年又四个月,双方共投入百万以上兵力。在整个楚汉相争的过程中刘邦及其谋臣始终注意政治、军事、外交的配合,刘邦知人善任,因势利导,主战场与次战场的呼应,前方与后方的协调,将正面相持、翼侧迂回和后方袭扰结合起来,调动、疲惫、削弱强敌,经反复搏斗,终于完全改变了力量对比,为灭楚兴汉奠定了坚实基础。在这场角逐中,项羽具有强烈的旧贵族意识,不善于用人,给项羽埋下了不能重建统一王朝的伏笔。