公元前636年(楚成王三十六年),宋襄公的儿子宋成公继位后,亲赴楚国国都,朝见楚成王,以示和好。公元前634年(楚成王三十八年),宋成公因其父宋襄公曾向晋文公表示过友善,而背弃楚国,投靠了晋国。宋成公的这一转变,让楚成王很是恼火。公元前633年(楚成王三十九年)冬,楚国联合陈、蔡、郑、许四国包围了宋都。宋成公赶紧派人向晋文公求救。
宋国对于晋、楚而言,都是非常重要的防守屏障,因此双方都很重视。晋国不会坐视不管,楚国也不会轻易放弃攻打。于是,晋文公召集大臣们商议对策。大臣先轸说:“我们出兵解救宋国于危难之中,不仅可借此机会报答宋国当年的惠恩,亦能壮大晋国的声威,稳定中原秩序,建立晋国的霸业。”晋文公倒有些顾虑,他说:“楚国对我也是有恩的,且楚国是南方强国,晋、宋之间又隔着曹、卫这两个楚国的盟国,一旦发生征战,我们会面临腹背受敌的境况。”而大臣狐偃忙说道:“这好办,曹国刚刚附从于楚国,卫国国君的女儿刚刚嫁给楚成王,如果我们进攻曹、卫两国,楚国一定前来解救,这样就可以解除楚国对宋的围攻,同时也避免了我们与楚国的直接接触。”
于是,晋文公与大家拟定作战计划,主要是兴师问罪于曹国,而借道卫国,如果卫国不同意,就先攻打卫国,然后讨伐曹国。
第二年春天,晋文公亲率大军向卫国进逼。卫国国君也知道当年没有好好款待这位公子,现在他是借机报复来了,即使让道也避免不了一战,况且让道会得罪楚国,到时会面临两面不讨好的境地,干脆拒绝让道。晋军势如破竹,又联合齐、秦,与之结盟。一看这阵势,卫国国君一度向晋国求和,要加入晋国的联盟,但被晋文公严词拒绝。卫国国君胆战心惊,准备逃往楚国。但卫国臣民不愿意看到自己的国君流亡异国他乡,于是他们把卫国国君转移到卫国的一个边城,以向晋国示好,求得和解。
而曹国国君一看卫国求和不成,干脆拼死抵抗,倒也落得一世英名。晋军打得很艰难,死亡不少,曹国把这些晋国战死之躯陈列在城墙上,以示恐吓。这更加激怒了晋军,扬言要杀掉所有的曹人,且挖掘城外曹人的祖坟。曹人感到有些害怕了,于是他们用棺材把这些尸体运出城外,晋军借机冲入城内,俘虏了曹国国君。
当曹、卫危急之时,楚成王亲率一部分军队前往救援,留下一部分由令尹子玉指挥,继续攻打宋国。宋国又派人向晋国求救。晋文公心想,如果不去救宋国,宋国真得倒向楚国,这对晋国争霸极为不利。正在左右为难之际,他的一位大臣提出了一个好办法,即可以先让宋国假装离开我们,送物品给秦、齐两国,由秦、齐两国出面请楚国退兵,楚国肯定不会轻易放弃宋国,这样楚国就会得罪秦、齐两国,然后我们再点一把火,把曹、卫的一部分土地分给宋国,这样楚国更加憎恨宋国,必然不会退兵,这样楚国与秦、齐的矛盾更加突出。而秦、齐拿了宋国的厚礼,必然会解救宋国,这样我们可坐收渔翁之利。
楚成王听说秦、齐倒向了晋国,于是赶紧命人通知令尹子玉撤退,不要和宋国再纠缠了。但令尹子玉这个人,比较固执,当他得知晋国把曹、卫的一部分土地送给宋国后,非常恼火,拒绝秦、齐的退兵请求,发誓一定要把宋国给灭了,要与晋国血战到底。他向楚成王请战,要求支援部分军队。楚成王一看一时无法让这头愤怒的公羊回头,只好给他200辆战车和少量士兵。
楚军将领宛春向令尹子玉建议:“晋国将曹、卫的土地分给宋国,目的是为了稳住宋国,不使其倒向楚国。我们也可以仿效他的这一做法,提出只要晋国恢复曹、卫两国的土地,楚军就撤退。这样,曹、卫两国会感到我们是想着救他们的,必定更加服从于楚国。如果晋国拒绝这一请求,不但曹、卫不满,那么宋国也会怨恨它的。”令尹子玉一听,很有道理,便派宛春去见晋文公。
晋军将领狐偃一听,气愤地说:“想拿解除宋国之围换取曹、卫两国的复国,楚国也太会算计了吧。”先轸看破了楚军的计谋,说道:“我们可以私下同意曹、卫复国,但曹、卫必须同楚国绝交,这样曹、卫两国会感谢我们,同时扣留宛春,激怒令尹子玉,让他找我们作战,这样宋之围也就解除了,宋国也因此会感激我们。而令尹子玉的狂躁会使其指挥失当,这样晋国必定胜利而归。”晋文公采纳了这个建议。
令尹子玉一听宛春被扣,又收到曹、卫两国的绝交信函,恼羞成怒,立即下令,调集围宋的全部军队,前往与晋国决战。
晋文公按照当年与楚成王的约定,让自己的军队退避三舍。这时,宋国也派部分军队参加作战,秦、齐的支援部队也来了。于是在晋文公的率领下,四国联军驻扎在一个叫城濮(今山东鄄城西南)的地方。历史上著名的城濮之战就这样开始了。
对于退避三舍,晋军诸多将士都不明白,待战后才知晋文公的真正用意。其一,可以报答当年楚国知遇之恩;其二,可以接近晋国国土,得到后方给养;其三,可以更好地解除楚军对宋的围攻。
由于令尹子玉的固执和鲁莽,这场大战以晋国胜利、楚国失败而告终。令尹子玉直到最后才醒悟过来,但为时已晚,他只能以死谢罪。
这场战争的直接交锋实际上只持续了一天,但这是晋、楚争霸的关键性战役,也是一场关系中原地区局势的重要战役。晋国胜利后,声势大振,原来依附于楚国的一些中原小国,也站到了晋国一边。晋文公还想办法让周天子亲自来到践土(今河南永泽西北)这个地方慰问前方征战的将士。
晋文公率领齐、鲁、宋、蔡、郑、卫等诸侯,列队迎接周天子,并以诸侯领袖的身份主持大会,约定:各路诸侯要尽心维护周王室,不要互相争斗,团结一致,如果违背盟约,神灵是不会宽恕的。践土会盟之后,晋国成为名副其实的中原霸主。
早在公元前635年(楚成王三十七年),秦、晋就联合攻打秦、楚之间的一个小国鄀。鄀先前是附属于楚国的。起初楚人并不在意,认为这是边境的一般军事冲突,只派边境的申县与息县两县的武装力量前往戍守。而秦国军队以狡诈之法偷袭了两县之楚师,令尹子玉听后很是愤怒,派兵追击,可惜秦师早已撤退。这是秦、楚两国初次交锋。其中,晋国虽然只是起了一个配角的作用,但可见晋国与秦国走得更近了。
公元前634年,齐多次伐鲁,鲁国只好向楚求救。经鲁国使臣的软磨硬泡以及鲁国自请做楚国伐齐的向导,令尹子玉最后答应出兵救援。
令尹子玉是一位令人敬畏的将才,治军颇严,但重枝节而抓不住根本。为了伐宋,楚成王先派前任令尹子文阅兵,接着又派现任令尹子玉阅兵。令尹子文仅用了一个早晨,也没有惩罚一个士兵,就完成了检阅军队的任务。而令尹子玉却用了一整天,还责罚了十多个士兵。一些老臣曾向令尹子文道贺,说他推荐令尹子玉是知人善任,但有一位楚人不仅不向令尹子文祝贺,还说子玉既不适合带兵打仗,也不适合辅助君王治理国家。这一言论,日后果真得到了验证。
虽然晋国经城濮之战取得了霸主地位,但也是昙花一现,好景不长。仅仅4年后(公元前628年),晋文公这位传奇人物就离世了。在其离世前,晋文公做了一件有意义的事情,即推动晋、楚和好。