公元前 633 年冬,楚成王率领楚、郑、陈、蔡等多国军队进攻宋国,围困宋国都城商丘,宋国的司马公孙固到晋国告急求援。于是晋文公和群臣商量是否出兵及如何救助宋国。大夫先轸力劝晋文公出兵救宋,他认为,救宋既能够“取威定霸”,又报答了以前晋文公流亡到宋国时,宋国国君赠送车马的恩惠。但是宋国不靠近晋国,劳师远征救宋,必须经过楚国的盟国曹国、卫国;而且楚军实力强大,正面交锋也恐怕难以取胜。晋国的狐偃针对这一情况,建议晋文公先攻曹、卫两国,那时楚国必定移兵相救,那样便可解除宋国之围。晋文公采纳了这一建议。尽管如此,晋国感到真正的敌人是楚国,要对付如此强大的敌人,必须进行较充分的准备。晋国按照大国的标准扩充了军队,任命了一批比较优秀的贵族官吏出任军队的将领。
经过一段时间的准备,晋文公在公元前 632年 1 月,将军队集中在晋国和卫国的边境上,借口当年曹国国君曹共公侮辱过他,要求取道卫国进攻曹国,遭到卫国拒绝。晋文公迅速把军队调回,绕道从现在河南汲县南黄河渡口渡河,出其不意地直捣卫国国境,先后攻占了五鹿及卫都楚丘,占领了整个卫地。晋军接着又向曹国发起了攻击,三个月间,攻克了曹国都城陶丘(今山东定陶),俘虏了曹共公。