晋军一口气后撤了九十里,到了城濮(今山东鄄城西南),才停下来,布置好了阵势。楚国有些将军见晋军后撤,想停止进攻。可是成得臣却不答应,一步盯一步地追到城濮,跟晋军遥遥相对。成得臣还派人向晋文公下战书,措词十分傲慢。晋文公也派人回答说:“贵国的恩惠,我们从来都不敢忘记,所以退让到这儿。现在既然你们不肯谅解,那么只好在战场上比个高低啦。”
大战一触即发。成得臣一向骄傲自大,不把晋人放在眼里。他不顾前后地直追上去,正中了晋军的埋伏。晋军的中军精锐,猛冲过来,把成得臣的军队拦腰切断。原来假装败退的晋军又回过头来,前后夹击,把楚军杀得七零八落。晋文公连忙下令,吩咐将士们只要把楚军赶跑就是了,不再追杀。成得臣带了败兵残将回到半路上,草木皆兵,心惊胆战,自己觉得没法向楚成王交代,就自杀了。
晋国打败楚国的消息传到周都洛邑,周襄王和大臣都认为晋文公立了大功。周襄王还亲自到践土(今河南原阳西南,践音jiàn)慰劳晋军。晋文公趁此机会,在践土给天子造了一座新宫,还约了各国诸侯开个大会,订立盟约。这样,晋文公就当上了中原的第三个霸主。