公元前579年(周简王七年),在宋国大夫华元的安排下,晋国的士燮与楚国的公子罢、许偃在宋国的西门外举行第一次弭兵会盟。两国同意暂息兵戈,停止战争。公元前578年(周简王八年)春,晋厉公与晋将栾书、荀庚、士燮,韩厥等率上,中,下及新四军前往周都王城(今河南省洛阳市王城公园附近),与齐、宋、卫、鲁、郑、曹、邾、滕八国国君所率军队会师,筹划攻秦事宜,周简王亦派大夫刘康公、成肃公率军助战。同年夏,晋大夫吕相(魏相)奉命赴秦,以绝秦书历数秦国罪状。随后,晋厉公率诸侯联军西进攻秦,秦国出兵迎击,双方在麻隧展开激战,秦军大败。麻隧之战后,晋国免除后顾之忧,势力更盛,中原诸国实为晋国之属国。晋国在取得麻隧之战的胜利后,完成了“秦、狄、齐”三强服晋的部署,解除了对楚国作战时,秦国趁机自西出击的后顾之忧。而楚国未按盟约援秦,陷入被动(前627年崤之战后,秦国与楚国结盟对抗晋国)。
公元前577年(周简王九年),郑国兴兵攻打许国,攻入许都外城,许国被迫割地求和。许国为楚国的附庸,作为报复,公元前576年(周简王十年),楚国起兵暴打郑国,至暴隧(今河南省原阳县西),接着又伐卫,至首止(今河南省睢县东)。为此,晋国中军将栾书意图报复楚国,但遭到韩厥的反对。同年,楚共王同意许灵公的要求,派楚国公子申把许国迁到叶城(今河南省叶县南),许国从此成为楚国附庸,其旧地为郑国所有。 公元前575年(周简王十一年)春,楚共王在武城(今河南省南阳市北)派遣公子成前去郑国,以汝阴之田(今河南省郏县、叶县间)向郑国求和,于是郑国背叛晋国,与楚国结盟。同年夏,郑国子罕率兵进攻宋国。宋军先后在汋陂(今河南省商丘市、宁陵县之间)、汋陵(今河南省宁陵县南)被郑国击败。
晋国得知郑国叛晋投楚,并兴兵伐宋以后,晋国准备兴师伐郑,一方面出动四军,一方面派人前往卫国、齐国、鲁国乞师,准备协同作战。晋军统帅是:国君晋厉公亲统四军;中军将栾书,中军佐士燮;上军将郤锜,上军佐荀偃;下军将韩厥,下军佐荀罃留守国内;新军将郤犨,新军佐郤至。
郑国国君郑成公闻讯,向楚国求救。楚共王决定出兵救郑,以司马子反、令尹子重、右尹子革统领三军,会同蛮军,迅速北上援救郑国。楚军统帅是:楚共王亲统三军;司马子反将中军,令尹子重将左军,右尹子革将右军。楚共王亲兵左广彭名驾驭战车,潘党为右;右广许偃驾驭战车,养由基为右。郑成公亲率郑军,石首驾驭战车,唐苟为右。
公元前575年(周简王十一年)农历五月,晋军渡过黄河,听说楚军将来到,中军佐范文子(士燮)想退回去,进行了反战陈述中军将栾书没有同意范文子的请求。公元前575年(周简王十一年)农历六月,晋国军队和楚国军队在鄢陵(今河南鄢陵县北)相遇。范文子不想同楚军交战。新军佐郤至说:“秦、晋韩原之战,惠公没有凯旋;晋、狄箕之战,主帅先轸阵亡;晋、楚邲之战,主帅荀林父兵败溃逃。这些都是晋国的奇耻大辱!你也见过先君这些战事,现 在我们躲避楚军,就又增加了耻辱。”范文子说:“我们先君多次作战是有原因的。秦、狄、齐、楚都是强国,如果他们不尽力,子孙后代就将被削弱。现 在秦、狄、齐三个强国已经屈服了,敌人只有一个楚国罢了。只有圣人才能做到国家内部和外部不存在忧患。如果外部不安宁就必定会有内部忧患。为什么不暂时放过楚国,使晋国对外保持警惕呢?”范文子的意见没有被栾书采纳。
公元前575年(周简王十一年)农历六月二十九,是古代用兵所忌的晦日,楚军想在援晋的齐、鲁、宋、卫联军到达之前速战速决,于是在六月二十九日早晨趁晋军不备,利用晨雾掩护,突然迫近晋军营垒布阵。
晋军因营前有泥沼,加之楚军逼近,兵车无法出营列阵,处于不利地位。晋军中军将栾书主张先避其锋芒,固营坚守,待诸侯援军到达,以优势兵力转取攻势,乘楚军后退而击破。
新军将郤至则认为应当出击迎战,并列举楚军的诸多弱点:楚军中军将子反和左军将子重关系不好;楚王的亲兵老旧不精良;郑军列阵不整;随楚出征的蛮军不懂得阵法;楚军布阵于无月光之夜,实不吉利;楚军布阵后,阵中士卒喧哗不静,秩序混乱。
晋厉公采纳郤至的建议,决定统军迎战。又采纳范文子的儿子士匄的计谋,在军营内填井平灶,扩大空间,就地列阵,既摆脱不能出营布阵的困境,又隐蔽自己的部署调整。
楚军方面,楚共王在晋国叛臣伯州犁(晋伯宗之子。伯宗在晋被害后,伯州犁逃往楚国,时任大宰)陪同下,登上巢车(楼车),观察晋军在阵营内的动静。楚王问道:“晋军正驾著兵车左右奔跑,这是怎么回事?”伯州犁回答说:“是召集军官。”楚王说:“那些人都到中军集合了。”伯州犁说:“这是在开会商量。”楚王说:“搭起帐幕了。”伯州犁说:“这是晋军虔诚地向先君卜吉凶。”楚王说:“撤去帐幕了。”伯州犁说:“快要发布命令了。”楚王说:“非常喧闹,而且尘土飞扬起来了。”伯州犁说:“这是准备填井平灶,摆开阵势。”楚王说:“都登上了战车,左右两边的人又拿著武器下车了。”伯州犁说:“这是听取主帅发布誓师令。”楚王问道:“要开战了吗?”伯州犁回答说:“还不知道。”楚王说:“又上了战车,左右两边的人又都下来了。”伯州犁说:“这是战前向神祈祷。”伯州犁把晋厉公亲兵的位置告诉了楚共王。晋厉公也在楚国旧臣苗贲皇(楚国令尹斗椒的儿子)的陪伴下,登高台观察楚军的阵势。苗贲皇在晋厉公身旁,也把楚共王亲兵的位置告诉了晋厉公。晋厉公左右的将士都说;“楚国最出色的武士都在中军,而且人数众多,不可抵挡。”晋厉公卜筮问吉凶,卜官说大吉。
苗贲皇熟悉楚军内情,向晋厉公提出建议说:“楚国的精锐部队只不过是中军里那些楚王的亲兵罢了。请分出一些精兵来攻击楚国的左右两军,再集中三军攻打楚王的亲兵,一定能把它们打得大败。”晋厉公采纳苗贲皇的建议,由中军将、佐各率精锐一部加强左右两翼。在营内开辟通道,迅速出营,绕营前泥沼两侧向楚军发起进攻。首先击破楚军中薄弱的左、右军。楚共王望见晋厉公所在的晋中军兵力薄弱,即率中军攻打,企图先击败晋中军,结果遭到晋军的抗击。晋将魏锜用箭射伤楚共王的眼睛,迫使楚中军后退,未及支援两翼。
楚共王召来养由基,给他两支箭,令其射魏锜。养由基一箭射中了魏锜的颈项,魏锜伏在弓套上死去,养由基携另一支箭向楚共王复命。战斗从晨至暮,楚军受挫后退,虽然楚王子公子筏被俘,楚共王也被射瞎一只眼睛,郑将唐苟为保护郑成公败逃而战死,但双方胜负未定。楚共王决定次日再战。楚国的司马子反派军吏视察伤员,补充步兵与车兵,修理盔甲武器,清理战车马匹,命令次日鸡鸣时吃饭,整装待命,投入战斗。晋国的苗贲皇也通告全军作好准备,次日再战,并故意放松对楚国战俘的看守,让他们逃回楚营,报告晋军备战情况。楚共王得知晋军已有准备后,立即召见子反讨论对策,子反当晚醉酒,不能应召入见。楚共王无奈,引 领军队趁着夜色撤退。楚军退到瑕地时,子反为令尹子重所逼,畏罪自杀。
公元前575年(周简王十一年)农历六月三十日,晋军胜利进占楚军营地,食用楚军留下的粮食,在那里休整三天后凯旋回师。鄢陵之战,至此以晋军的胜利而结束。
鄢陵之战后不久,晋国在宋国的沙随重会诸侯,谋划讨伐郑国,随后晋国、齐国、宋国、鲁国、邾国等国军队讨伐郑国,继而讨伐陈国、蔡国。郑国子罕出兵夜袭,宋国、齐国、卫国三国军队被击败。公元前574年(周简王十二年),郑国子驷主动出击,进攻晋国的虚、滑(今河南省偃师市),卫国出兵援救晋国。同年夏,楚国派遣公子成、公子寅领兵去郑国,帮助郑国抗击晋国。不久,晋厉公会同周、齐、宋、鲁、卫、曹、邾等国军队进攻郑国,楚国子重率军救郑国,晋国联军主动撤退。同年冬,晋国又会同上述各国军队讨伐郑国、围攻郑国,楚国公子申率军救郑,由于采用”三驾疲楚“的策略,各国军队因楚军进而联军退。 晋悼公采用”三驾疲楚“的策略,《左传》记载晋悼公(前586年-前558年)时晋“三驾而楚不敢与争”,最终楚国无力应对。鄢陵之战是晋楚争霸战争中继城濮之战、邲之战后第三次、也是两国最后一次主力军队的会战。鄢陵之战标志着楚国对中原的争夺走向颓势。晋国虽然借此战重整霸业(晋悼公复霸),但其对中原诸侯的控制力逐渐减弱。