晋军撤到城濮以后,齐军、秦军、宋军也先后前来会师。晋文公检阅了军队,认为军容整齐,士气高涨,可以同楚军一战。于是当子玉派鬬〔dou豆〕勃来请战时,晋文公便派栾枝作了答复,大意说:我们国君只因为不敢忘记楚王的恩惠,所以才让我军撤退到这里。现在既然你这样好战,那就明天在战场上见吧!
四月四日这天,晋、楚两军在城濮以南的莘北摆开决战阵势。子玉将楚军分成中、左、右三军:中军最精锐,由子玉亲自指挥;右军由陈、蔡等国军队组成,战斗力最弱。决战开始,晋军下军副将胥臣把驾车的马蒙上虎皮,出其不意地首先向楚军右军发起进攻。陈、蔡等国的杂牌军遭到突然袭击,不禁惊慌失措,都争先恐后地弃阵逃跑,楚军右军就这样崩溃了。这时候,晋军上军主将狐毛,故意在战车上竖起两面大旗,引车后退,装作要退却的模样;下军主将栾枝命人用战车拖着树枝扬起尘土,也假装撤退。子玉不知道是计,下令左军追击。晋军中军主将先轸、副将郤溱〔xizhen戏真〕指挥中军,拦腰截杀楚军;狐毛指挥的上军也回军反击。楚军左军腹背受敌,退路被切断,大部分官兵被晋军歼灭,一小部分逃散,溃不成军。子玉看到左右两军都已失败,急忙鸣金收军,退出战场,才侥幸没有全军覆没。
晋楚城濮之战,是春秋中期一次重大的争霸战争。楚军力量强大,晋军实力比较弱,结果晋军反而打败了楚军,是什么原因呢?第一,晋国在国内采取了整顿内政,发展生产,训练军队等一系列增强国家力量的措施,为战争的胜利打下了可靠的基础。第二,晋国在外交上开展了一系列灵活巧妙的斗争,扩大了自己的同盟军,孤立了楚国;实行了“退避三舍”的策略,使自己处于有理和有利的地位。第三,在作战的时候,晋军选择了楚军最弱的部分进行突破,用计诱敌追赶,然后把楚军分割击溃,获得全胜。