楚国有些将军见晋军后撤,就想停止进攻。可是成得臣不肯,他步步紧逼地追到城濮,还派人向晋文公送去了措辞十分傲慢的战书。晋文公则派人回答说:“贵国的恩惠,我们从来都不敢忘记,所以今天退让到这儿。现在既然你们仍不肯谅解,那也只好在战场上一较高下了。”
晋楚两个强国之间的大战开始了。刚刚交手,晋国的军队就一路向后败退,他们的战车后面还拖着很多伐下的树枝,战车后退时,扬起一阵阵的烟尘,看上去十分慌乱。
一向骄傲自大的成得臣,从来也没把晋军放在眼里,此时更认定晋国是怕了他们,于是毫不顾忌地直追过去,正中了晋军的埋伏。晋军最精锐的中军,从侧面猛冲过来,把成得臣的军队拦腰切断。原来假装败退的一支又回过头来,前后夹击,把楚军杀得七零八落。
晋文公又连忙下令,要将士们不再追杀逃跑的楚军。成得臣带着残余的部队走在回楚国的路上,自己觉得没法向楚成王交代,就自杀了。晋军占领了楚国营地,把楚军遗弃下来的粮食吃了三天,才班师回国。