劉備逃到了鄴城(冀州的治所,在今河北臨漳西南),袁紹才感到曹操是個強大的敵人,決心進攻許都。原來勸他攻打許都的田豐,這時候卻不贊成馬上進攻。他說:「現在許都已經不是空虛的了,怎麼還能去襲擊呢!曹操兵馬雖然少,但是他善於用兵,變化多端,可不能小看他。我看還是作長期的打算。」
袁紹不聽田豐的話,田豐一再勸諫,袁紹反認為他擾亂軍心,把他下了監獄,他向各州郡發出文書,聲討曹操。公元200年,袁紹集中了十萬精兵,派沮授(沮音jū)為監軍,從鄴城出發進兵黎陽(今河南浚縣)。他先派大將顏良渡過黃河,進攻白馬(今河南滑縣)。
這時候,曹操早已率領兵馬回到官渡,聽到白馬被圍,準備親自去救。他的謀士荀攸勸他說:「敵人兵多,我們人少,不能跟他硬拚。不如分一部分人馬往西在延津(在今河南延津西北)一帶假裝渡河,把袁軍主力引到西邊。我們就派一支輕騎兵到白馬,打他個措手不及。」
曹操採納了荀攸的意見,來個聲東擊西。袁紹聽說曹操要在延津渡河,果然派大軍來堵截。哪兒知道曹操已經親自帶領一支輕騎兵襲擊白馬。包圍白馬的袁軍大將顏良沒防備,被曹軍殺得大敗。顏良被殺,白馬之圍也解除了。
袁紹聽到曹操救了白馬,氣得直跳腳。監軍沮授勸袁紹把主力留在延津南面,分一部分兵力出擊。但是袁紹心急火燎,不聽沮授勸告,下令全軍渡河追擊曹軍,並且派大將文丑率領五六千騎兵打先鋒。這時候,曹操從白馬向官渡撤退。聽說袁軍來追,就把六百名騎兵埋伏在延津南坡,叫兵士解下馬鞍,讓馬在山坡下蹓躂,把武器盔甲丟得滿地都是。
文醜的騎兵趕到南坡,看見這樣子,認為曹軍已經逃遠了,叫兵士收拾那丟在地上的武器。曹操一聲令下,六百名伏兵一齊衝殺出來。袁軍來不及抵抗,被殺得七零八落。文丑也糊里糊塗地丟了腦袋。
兩場仗打下來,袁紹一連損失了他手下的顏良、文丑兩員大將,袁軍將士打得垂頭喪氣。但是袁紹不肯罷休,一定要追擊曹操。監軍沮授說:「我們人儘管多,可沒像曹軍那麼勇猛;曹軍雖然勇猛,但是糧食沒有我們多。所以我們還是堅守在這裡,等曹軍糧草完了,他們自然會退兵。」
袁紹又不聽沮授勸告,命令將士繼續進軍,一直趕到官渡,才紮下營寨。曹操的人馬也早已回到官渡,佈置好陣勢,堅守營壘。
袁紹看到曹軍守住營壘,就吩咐兵士在曹營外面堆起土山,築起高台,讓兵士們在高台上居高臨下向曹營射箭。
曹軍只得用盾牌遮住身子,在軍營裡走動。
曹操跟謀士們一商量,設計了一種霹靂車。這種車上安裝著機紐。兵士們扳動機紐,把十幾斤重的石頭發出去,打坍了袁軍的高台,許多袁軍兵士被打得頭破血流。
袁紹吃了虧,又想出一個辦法。他叫兵士在深夜裡偷偷地挖地道,打算從地道裡鑽到曹營去偷襲。但是他們的行動早被曹軍發現。曹操吩咐兵士在兵營前挖了一條又長又深的壕溝,切斷地道的出口。袁紹的偷襲計劃又失敗了。
就這樣,雙方在官渡相持了一個多月。日子一久,曹軍糧食越來越少,兵士疲勞不堪。曹操也有點支持不住,寫信到許都告訴荀彧,準備退兵。荀彧回信,勸曹操無論如何要堅持下去。
這時候,袁紹方面的軍糧卻從鄴城源源不斷地運來。袁紹派大將淳於瓊帶領一萬人馬運送軍糧,並把大批軍糧囤積在離開官渡四十里的烏巢。
袁紹的謀士許攸探聽到曹操缺糧的情報,向袁紹獻計,勸袁紹派出一小支人馬,繞過官渡,偷襲許都。袁紹很冷淡地說:「不行,我要先打敗曹操。」
許攸還想勸他,正好有人從鄴城送給袁紹一封信,說許攸家裡的人在那裡犯法,已經被當地官員逮了起來。袁紹看了信,把許攸狠狠地責罵了一通。
許攸又氣又恨,想起曹操是他的老朋友,就連夜逃出袁營,投奔曹操。
曹操在大營裡剛脫下靴子想睡,聽說許攸來投奔他,高興得來不及穿靴子,光著腳板跑出來歡迎許攸,說:「好啊!
您來了,我的大事就有希望了。」
許攸坐下來後說:「袁紹來勢很猛,您打算怎麼對付他?
現在你們的糧食還有多少?」
曹操說:「還可以支持一年。」
許攸冷冷一笑,說:「沒有那麼多吧!」
曹操改口說:「對,只能支持半年。」
許攸裝出生氣的樣子說:「您難道不想打敗袁紹嗎?為什麼在老朋友面前還要說假話呢!」
曹操只好實說:「軍營裡的糧食,只能維持一個月,您看怎麼辦?」
許攸說:「我知道您的情況很危急,特地來給您捎個信。現在袁紹有一萬多車糧食、軍械,全都放在烏巢。淳於瓊的防備很鬆。您只要帶一支輕騎兵去襲擊,把他的糧草全部燒光,不出三天,他就不戰自敗。」
曹操得到這個重要情報,立刻把荀攸、曹洪找來,吩咐他們守好官渡大營,自己帶領五千騎兵,連夜向烏巢進發。他們打著袁軍的旗號,沿路遇到袁軍的崗哨查問,就說是袁紹派去增援烏巢的。袁軍的崗哨沒有懷疑,就放他們過去了。
曹軍到了烏巢,就圍住烏巢糧屯,放起一把火,把一萬車糧草,燒得個一乾二淨。烏巢的守將淳於瓊匆忙應戰,也被曹軍殺了。
正在官渡的袁軍將士聽說烏巢起火,都驚慌失措。袁紹手下的兩員大將張郃(音he)、高覽帶兵投降。曹軍乘勢猛攻,袁軍四下逃散。袁紹和他的兒子袁譚,連盔甲也來不及穿戴,帶著剩下的八百多騎兵向北逃走。
經過這場決戰,袁紹的主力已經消滅。過了二年,袁紹病死。曹操又花了七年工夫,掃平了袁紹的殘餘勢力,統一了北方。