到達鄢陵的晉軍紮下軍營。六月二十九日早晨,楚軍突然出現在晉軍的軍營前,並且很快排好了戰陣。六月在魯成公十六年是小月,隻有二十九天,所以這一天稱為晦。如果是大月,有三十天。每月的最後一天稱為晦。兵家忌在這一天用兵。故晉軍並沒有準備這一天與楚作戰,也就沒有排戰陣。
晉軍戰陣都沒有排好,怎麼與楚作戰?所以,範燮之子範匄提出了,塞井夷灶,陳於軍中,而疏行首的建議。就是把軍營中的水井填平,爐灶夷平,宜於戰車行駛,然後在軍營中布陣,把軍營的壁壘開通,作為戰車的通道。但欒書認為,楚師輕佻,固壘而待之,不與楚軍交戰,三日後,楚軍必退兵。在楚軍退兵時追殺楚軍,可以獲得勝利。但郤至認為應該馬上與楚交戰。討論的結果是馬上與楚交戰。楚共王在巢車上所見就是晉軍將領合謀及布陣準備作戰的情況。
兩軍布好陣,開戰就是必然了。從早晨開戰,一直打到星星都出來了的晚上。楚共王眼睛的被魏錡射傷,魏錡被養由基射殺。鄭成公的車右戰死。楚公子茷被俘。這些是最重要的戰果。從這個成績看,楚國吃虧了,但還未全部失去取勝的機會。因為楚共王未死,軍事統帥子反沒有受一點損傷,楚國的大軍也還可以與晉對抗。
當二軍休戰時,作為楚軍的最高統帥,子反下達了一條命令,察夷傷,補卒乘,繕甲兵,展車馬,雞鳴而食,唯命是聽。古人朝食是在辰時,即今天的8點到10點。雞鳴是醜時,即今天的2點到4點。子反雖然沒有說,吃過早飯後會下什麼命令,但繼續作戰的概率要大於撤軍。而不說下達什麼命令也是為了保密。但秘密還是被人泄露出去了。
晉軍這邊很快知道了子反的命令,苗賁皇用了一計,讓楚軍俘虜聽去晉軍的命令,然後放他逃走。晉軍所下命令是,蒐乘補卒,秣馬利兵,修陳固列,蓐食申禱,明日複戰。明確說了,也是早早吃早飯,然後與楚交戰。
楚共王聽到這個情報,想找子反來商量明天怎麼與晉作戰,但子反卻來不了,喝酒喝多了,醉酒了。楚共王本身眼睛受傷,子反是楚軍統帥,一個受傷,一個醉酒,還怎麼指揮明天的作戰。楚共王隻好下令連夜撤軍。
鄢陵之戰,以楚軍失敗而結束。而同時結束的還有子反的生命。在楚軍退回到楚國的瑕地時,子反自殺。
子反之自殺是子重逼近的。子重說,初隕師徒者,而亦聞之矣。盍圖之。子重請子反想想,當年城濮之戰失敗的子玉可是自殺的,你怎麼辦,應該很清楚的。要子反效法子玉自殺。
但子反的自殺是自願的。他自己回複子重說,雖微先大夫有之,大夫命側,側也不義?側亡君師,敢忘其死?就算沒有子玉這樣的先例,戰敗後主將自殺,您子重以義來責讓我,我隻為這義,也應該自殺。何為義?我身為楚軍統帥,且因為我醉酒而致楚軍戰敗,我就得負我應當負的責任。這麼大的責任,隻是辭職受罰是不相當的,隻有死才與之相宜,此即義也。
楚共王什麼態度呢?是楚共王先提出了城濮之戰子玉之死之事,但楚共王說,子玉當年失敗,楚成王不在軍隊中,所以他子玉應該負主要責任,所以他子玉必須自殺。而此戰中,我楚王本人也參戰,那麼這個責任就我來承擔了,似乎是不追究子反的責任。但一細想,其實楚共王的話另有他意。如果楚共王真不想讓子反死,就不應該提子玉自殺之事。提子玉自殺之事,就是暗示子反效法。比如,楚共王隻要說,此戰不榖之罪也,子無以為過。就是真的承擔責任的意思。但楚共王先對子反說的是,先大夫之覆師徒者,意思是先大夫子玉使楚師戰敗,那麼就是說,此戰也是你子反使楚師戰敗的,真正的責任在你子反。無楚王無非是替你承擔責任罷了。
多麼英明的國君。所以,子反隻有死,必須死,他也情願死。而孔子修訂的春秋經記載此事是,楚殺其大夫公子側。所以,要子反死,是楚共王的意誌,雖然楚共王沒有下這樣的命令。