公元前579年,晋楚两国在宋国西门订立盟约,暂时搁置争端,专心应对各自困境:晋国遭受秦、狄联攻,急需稳定后方以全力反击;楚国则陷入内部纷争,无余力与晋国争霸。尽管结盟,晋楚两国并未真正实现和解,仅是一种策略性妥协。随后,晋国连破狄、秦,确立其在中原地区的霸主地位,并与齐国及南方的吴国结盟,共同对抗楚国。
公元前577年,倚仗晋国支持的郑国进攻许国却遭败绩,不甘失败的郑成公再次发兵并迫使许国割地求和。此举引起楚国不满,因其视许国为盟友,故决定攻打郑国,通过此举挑战晋国的霸权。
公元前575年,楚国企图拉拢郑国,承诺赠予汝阴之地以示和解,郑国转而背弃晋国倒向楚国。郑国攻击宋国之举,促使晋国联合卫、齐、鲁三国组成联军,晋厉公亲自挂帅,分设四大将军率领大军讨伐郑国。然而郑国迅速求助于楚国。
楚共王亲率精锐,与晋军在郑地鄢陵展开决战。当楚军抵达鄢陵时,晋的盟军尚未集结完毕。楚军决定利用人数优势,趁晋军孤立无援之际发动突袭。然晋军面临楚军压境、营地周边沼泽阻碍以及盟军未至的多重困境。晋军将领间对是否坚守待援或主动出击存在分歧,最终晋厉公采纳新军副将郤至的意见,果断出击,同时调整营地布局以适应决战需求。
战前,楚共王在曾任晋国官员、现为楚国大宰的伯州犁陪同下,登高观察晋军动态。伯州犁因曾遭郤氏家族排挤而逃至楚国任职,他对晋军的行动做出了解释,但楚军未能准确判断晋军的真实意图,未能做好充分的迎战准备。
晋军方面,晋厉公在苗贲皇的陪同下,登高视察楚军布阵。苗贲皇原为楚国权臣斗椒之子,因楚庄王平定若敖氏叛乱而逃至晋国,受封苗邑。由于他深谙楚军内部状况,指出楚军核心力量在于中军的王族精锐,而左、右两军分别由郑军与蛮族兵马构成,军纪和阵形均不够严整。据此,苗贲皇向晋厉公提出了针对性的战术建议,即调整晋军阵型,佯装中军虚弱,引诱楚左、右军攻击中军,然后调动上、下军精锐夹击,形成包围态势以消灭楚军。晋厉公接纳了这一策略,并据此修订了作战计划,命令中军主副将各自带领一部分精兵加强左右两翼。
按照新的部署,晋军冲出营寨,绕过前方泥沼两侧,对楚军发起猛烈攻击。楚共王果真落入圈套,认定晋中军实力不足,遂率楚中军直扑晋军中路。激战之中,晋将魏锜射伤楚共王眼部,楚共王命神射手养由基反击,养由基一箭射杀魏锜,并携另一箭回报楚共王。尽管楚共王负伤,但他依然强忍痛苦,坚持在前线指挥战斗。
双方从清晨激战至黄昏,仍未分出胜负,楚军伤亡严重。楚共王决定暂时收兵,让士兵休整后再战。楚将子反在军中巡查伤员,整顿军队,预备次日再战。
晋军方面,苗贲皇布置军队准备次日再战,并特意释放部分楚国俘虏返回楚营,传递晋军备战的信息。楚共王得知晋军将继续交锋后,紧急召见主帅子反商议对策,却发现子反因饮酒过量而无法参与决策。面对如此窘境,楚共王无奈之下只得选择带领军队连夜撤退。尽管楚军在鄢陵之战中遭遇挫折,但并未彻底落败,然而中军主帅司马子反因临阵酗酒贻误战机,致使楚共王被迫退兵。楚军撤至瑕地时,子反在子重的压力下自尽谢罪。
鄢陵之战作为晋楚争霸历史上的第三大战役,同时也是两国最后一次大规模正面交锋,最终以楚共王黯然撤退告终。此战过后,楚国对中原的霸权显著衰弱,而晋国虽进一步稳固霸业,但从战斗全程看,鲁、卫两国始终未曾派遣援军,唯有齐国在晋军结束战斗返程时才姗姗来迟,显示晋国对中原诸侯的掌控力已有所下降。