曹操在官渡大敗袁紹後,整頓軍馬,北渡黃河,直追袁紹。袁紹不甘心失敗,為報仇雪恥,又糾集河北四州之兵,至倉亭紮寨,準備與曹操決一死戰。袁、曹兩軍對峙,各佈陣勢,第一次交 鋒,曹軍徐晃部將史渙就死於袁紹第三子袁尚的利箭之下。
曹操失去史渙一將,心中煩悶,說:「似這樣對陣相互廝殺,何時是個了局?」
謀士程昱獻計道:「秦末楚漢相爭,高祖皇帝運用十面埋伏之計,使項羽自刎身亡。我們何不傚法?」
曹操說:「願你詳細講一講。」
程昱說:「將我軍退至黃河邊上,背水為陣,伏兵十隊,引誘袁紹逼趕我軍。」
左右大驚道:「如此,我軍豈不太危險了?」
程昱笑道:「兵法說,置之死地而後生。我軍無退路,必須死戰,即可穩勝袁紹。」
曹操採納了程昱的計謀,將全軍分列左右各五隊。左列,一隊夏侯惇,二隊張遼,三隊李典,四隊樂進,五隊夏侯淵;右列:一隊曹洪,二隊張郃,三隊徐晃,四隊於禁,五隊高覽。許褚為中軍先鋒,第二天,十隊人馬先行,埋伏在兩側。到了半夜,曹操同許褚率軍前進,裝著偷襲袁寨的樣子。
袁紹見狀,笑道:「曹操這下子要餵魚了。」盡發五寨人馬,迎戰許褚。許褚撥馬撤退,袁紹驅軍趕來,喊殺之聲 不絕。等到天亮,袁紹將許褚逼到河邊。曹軍已無退路,曹操大喊:「前有追兵,後是絕境,大家為什麼不決一死戰?」曹軍聽了,一齊奮力向前衝殺。許褚一馬當先,揮刀斬殺袁軍十來個將領。
袁軍大亂,只好撤退。退了一段路,幾聲「咚咚」戰鼓響,左邊夏侯淵、右邊高覽兩支兵馬衝出,袁紹帶領三個兒子一個外甥,死命衝出一條血路。
又跑了十來里,左邊樂進、右邊於禁殺出,殺得袁軍屍橫遍野。又跑了數里,左邊李典、右邊徐晃兩支人馬截殺過來,袁紹父子膽戰心驚,奔入寨門,令軍隊埋鍋造飯,正要吃時,左邊張遼、右邊張郃,逕直前來沖寨。袁紹慌忙上馬,率部奔向倉亭,人困馬乏,正要休息。不料後面曹操率大軍趕來,袁紹拚命逃離。正走間,右邊曹洪、左邊夏侯惇,擋住去路。袁紹大叫:「如果不拚死一戰,我們都要給活捉了!」奮力衝殺一陣,僥倖逃出重圍。
袁紹抱住兒子們大哭一場,長歎道:「我經歷戰事數十次,從沒有像今天這樣狼狽的!」說完,命令部將回各地整頓軍務,自己帶著袁尚到冀州養病去了。