晋军虽然攻下了曹、卫两国,楚国还是围住宋都商丘不放,宋国派人向晋国求救。当时齐、秦两个强国一直在袖手旁观,晋文公摸不清它们的底,因此,对于是不是继续进兵同楚国交战,拿不定主意。中军主将先轸献计说:“最好的办法是叫宋国送一些好处给齐、秦两国,请它们向楚国讨个人情,劝楚国撤围。我们这里则把曹共公扣留起来,再把曹、卫两国的土地分给宋国一部分。楚国和曹、卫是盟国,看到曹、卫的土地被宋国占去,一定不会接受齐、秦的调停。齐、秦两国既然得到了宋国的好处,一定会抱怨楚国不听他们的劝告,就不能不出兵参战。”(原文见《左传·僖公二十八年》)
先轸这个从客观形势出发,制造矛盾、利用矛盾的策略,得到晋文公的赞赏。晋文公立即照计实行,果然调动了齐、秦两国出兵参战。这样一来,双方的力量对比就大大有利于晋国了。
楚成王听到晋国和齐、秦建立了联盟,感到形势对自己很不利,同时他了解到晋文公长期流亡在外,历尽艰苦,熟悉各国情况,而且具有灵活的政治手腕,是很难对付的。因此,他指示楚军主将子玉要知难而退,暂时避免同晋军进行决战。可是骄傲轻敌的子玉没有看清变化了的形势,仍然盲目地要求同晋军决战。他对楚成王说:“我不敢说一定有把握打胜仗,但是愿意和晋军一决胜负,以堵住那些害怕敌人、说我坏话人的嘴。”楚成王听了子玉的请求,既不完全同意,也没有坚决反对,他怀着侥幸取胜的心理,拨给子玉一支人数不多的部队,作为增援力量。
子玉得到援兵以后,就琢磨着怎样同晋军作战。他耍了一个花招,派使者宛春向晋文公提出了一个“和解”条件:如果晋军允许曹、卫复国,楚国也可以从宋国撤兵。这个“和解”条件使晋文公很为难。狐偃认为子玉的条件太苛刻,不能接受,主张出兵向楚国进攻。先轸不同意这样做,他说:“我们名义上是为救宋国而来的,如果我们公开反对楚国提出的条件,而使宋国遭到灭亡,各国诸侯必然会责难我们。这样,就使楚国成为曹、卫、宋三国的恩人,晋国却跟这三国都结下了仇。树敌多了,还能打胜仗吗”?先轸接着向晋文公建议说:“我们不如私下答应曹、卫复国,条件是他们必须同楚国断交;同时把宛春扣留起来,激怒子玉来挑战,这样,主动权就操在我们手里了。”先轸的策略是很高明的,他能够在复杂的斗争中,摆脱晋国在外交上的不利处境,既不得罪宋国,又拆散了楚国和曹、卫的同盟,使楚国陷入孤立地位。晋文公欣然采纳了他的建议,当时就下令把宛春扣留起来,并且答应曹、卫两国复国。两国在感激之下,都同楚国断了交。这样一来,真的把子玉激怒了,他立即率领楚军和其他盟国的军队开向曹都陶丘,攻打晋军。
晋文公见楚军逼近,不但不派兵迎击,反而命令晋军向卫国境内撤退。晋军有些将士不明白这是怎么回事,感到很奇怪。狐偃向大家解释说:“出兵打仗,理直的军队士气就旺盛,理亏的军队士气就低落。我们的国君在流亡的时候受过楚王的恩惠,曾经答应过楚王:如果晋、楚两国发生战争,一定叫晋军‘退避三舍’。现在我军后撤,正是对楚国的报答。我们如果说话不算数,那就是楚军理直而晋军理屈了。如果晋军退避而楚军仍然不肯罢兵,那就是楚军来犯晋军,理亏的是楚军,我们就有理由打它了。”
晋军按计划后退90里,撤到卫国境内的城濮。晋军后撤之后,楚军将士认为楚国已经有了体面,不想再追击晋军。可是主将子玉傲气十足,不肯就此罢休,命令楚军继续前进,一直追到城濮,扎下营寨,准备同晋军决战。