晋交战。他告诫子玉说:晋侯流亡在外十九年,有丰富经验,又洞察民情,切不可轻举妄动。子玉以善战闻名于诸侯,但骄傲自负,不察晋军情况,仍然要求楚王允许他同晋军作战。楚王虽然答应了他的请求,但不肯多给他增加兵力,只派出西广、东宫与若敖的六卒去增援。子玉为寻找借口同晋军决战,派宛春向晋文公提出了一个“晋许曹、卫复国,楚解宋国之围”的休战条件。因为有“君取一,臣取二”之说; 所以狐偃认为子玉太无礼,主张抓住这个理由,向楚军进攻。先轸却认为,子玉的提议,“一言而定三国”,如果晋国不答应,就把三国都得罪了。晋国出兵是来救宋的,如果宋国灭亡,各国诸侯会责难晋国。楚国变成三国的恩人,而晋却与三国结怨。遂提出良策让晋文公扣留宛春,私下允许曹、卫两国复国。曹、卫两国遂都与楚绝交。这样一来,子玉果然被激怒,不顾楚王“无从晋师”的告诫,立即挥军向曹都陶丘(今山东定陶西北)前进。晋文公见楚军逼进,下令“退避三舍”在城濮(今山东范县临濮集一带)扎下营寨。这既是信守诺言,又可占据有利地形,纵敌骄横,诱而歼之。子玉果然率兵追来。双方展开了历史上有名的“城濮之战”。
四月二日,晋军与齐、秦、宋各国的军队到达城濮(今山东鄄城西南),四日在城濮以南的有莘与楚军对阵。决战开始,晋左翼下军佐将胥臣把驾车的马蒙上虎皮以助军威,首先向对面的楚右军的陈、蔡两军发起攻击,陈、蔡军战斗力很差,遭这一突然攻击,惊慌失措,退却溃败。晋右翼上军主将狐毛,竖起两面大旗伪装主将后退,引诱楚左军出击。下军主将栾枝也在阵后用车拖曳树枝,扬起尘土,佯示后面军队也在撤退,以诱楚右军,子玉不察实情,下令全军实施追击。子玉率左军迅速推进,以致—孤军突出,侧翼暴露。晋军主帅先轸见楚左军被诱出击,便指挥由晋国贵族子弟组成的精锐部队横击楚左军暴露的右翼。这时,伪装退的晋军也停止后退,配合中军夹击楚左军,楚左军遭到夹击,大部被歼。子玉看到左右两军都已失败,急急鸣金收军,退出战场,城濮之战至此结束。城濮决战当中,晋军针对楚军部署及其主帅骄躁轻敌的特点,采取避强击弱,佯退诱敌,各个击圾的战法,取得了决定性胜利。子玉不久即引咎自尽身亡。
四月二十九日,晋文公在郑地践土(今河南原阳县西南)召集诸侯会盟,并向周襄王献上俘获的楚国步卒千人,兵车百乘。周襄王策命文公为候伯(诸侯之长),晋国的霸业自此确定,晋文公成为春秋时继齐桓公后的第二个霸主。
论城濮之战的功劳,实际上正象当时有人说的:“城濮之事,先轸之谋。”
公元前628年,晋文公逝世,晋襄公继位。秦国乘文公新逝,派孟明视为大将,西乞术、白乙丙为副将,发兵偷越晋境袭击郑国。先轸对晋襄公说:“秦国违背蹇叔的谏言,由于贪婪而劳动百姓,这是上天给予我们的机会。机会不能丢失,敌人不能放走。放走敌人,就会留下祸患;违背天意,就不吉利。一定要进攻秦国军队。”栾枝提出:“没有报答秦国的恩施而进攻它的军队,岂不是忘记了先君的遗命吗?”先轸回答:“秦不为我们的丧事悲伤,反而趁机攻打我们的同姓国家,这是他们的无礼,还讲什么恩施?我听说,‘一日纵敌,数世之患’,为子孙后代打算,怎么能说是忘了先君的遗命呢?”于是发布命令,紧急动员姜戎的军队,襄公把丧服�