晋文公开始向中原地区发展势力。与此同时,楚成王不断把自己的势力向北渗透。这样一来,晋楚两国的冲突就变得越来越尖锐。
公元前634年,楚国借宋国投靠晋国为名,派大将军成得臣率兵攻宋。宋成公派人到晋国求救,晋文公采用大将军先轸之计,与齐、秦两国结成联盟,一同援宋抗楚。
楚成王一听说晋、齐、秦三国联盟,感到势力有些单薄,就派人通知成得臣退兵。成得臣极其自负,以为胜券在握,不肯退兵。为早日取胜,成得臣加紧攻打宋国,宋国军民拼命抵抗,楚军一时也攻不进城去。成得臣按捺不住,令三军解除对宋国的包围,集中兵力与晋军直接作战。
当晋、楚两军直接相对,正要开战时,狐偃对晋文公说:“当初您在楚国为客时,曾对楚王说,万一交战,晋军一定退避三舍。现在可不能失信啊!”晋文公听了低头沉思,身边的部将都纷纷反对。狐偃又说:“成得臣虽猖狂,但楚王的恩情我们不能忘。我们退避三舍正是对楚王表示谢意,并非怕成得臣啊。”
众人仍然议论不休,这时只见晋文公抬起头来缓缓地说:“退。”于是晋军一退就是九十里。
交战开始,晋军主帅先轸命狐毛假充主帅,迷惑对方。成得臣看见晋军主帅旗,即指挥兵士冲杀过来,狐毛抵挡几下假意败逃,成得臣不知是计,紧紧追赶。眼看就要追上,忽听一阵鼓声,晋军主帅先轸率精锐部队拦腰杀出,原来晋文公命军队后退九十里时早已设好了埋伏。这时狐毛也率队反击,楚军大败。
成得臣自觉愧对楚成王,就自杀了。晋军大胜,晋文公把俘获的一千楚兵和一百辆战车献给周王.天王赐给晋文公红色弓箭和黑色弓箭各一百张。天王赐弓箭给诸侯,是一种很高的奖赏,表示允许这个诸侯自由征伐其他诸侯。晋文公在诸侯中树立了很高的威望,便借此机会联合诸侯,歃血为盟,当上了霸主。