二月,袁紹派遣郭圖、淳于瓊、顏良去白馬進攻東郡太守劉延,袁紹親自領兵到黎陽,將要渡過黃河。夏季四月,曹操想要往北救援劉延。荀攸勸曹操說:“現在我們兵少,無法與袁紹抗衡,必須分散他的兵力才可以取勝。您到延津後,做出將要渡河攻打他們後方的樣子,袁紹一定會向西迎擊。然後您派出輕裝部隊去襲擊白馬,趁敵人沒有防備時衝殺過去,就可以擒獲顏良。” 曹操覺得可行便聽從了建議。
袁紹聽說曹操的軍隊渡河,果然分出一支隊伍去西邊應戰。曹操於是領兵日夜兼程直奔白馬,距白馬只有十幾裡時,顏良大吃一驚,匆忙出兵迎戰,但行軍倉促已然大潰。
曹操派張遼、關羽為先鋒攻城,打敗敵軍,斬殺了顏良。曹操終於解除了袁軍對白馬的包圍,並遷走了白馬的居民,沿著黃河西去。
袁紹聽聞大怒於是渡過黃河,追擊曹操的軍隊,追到延津南面。曹操整頓好軍隊,把軍營紮在南山坡下,派人爬上堡壘觀察敵情,偵察人員說:“大約有五六百騎兵。”過了一會兒,他又報告說:“騎兵逐漸增多,步兵多得數不過來。”曹操說:“不用再說了。”於是他命令騎兵解下馬鞍,放開馬匹。這個時候,曹操命令將從白馬運來的物資都放在路上。
眾將都認為敵人騎兵眾多,不如退回去守住營壘。荀攸說:“這是用來引誘敵人的釣餌,怎麼可以撤走呢?”袁紹的部將文丑與劉備率領五六千名騎兵先後追上來。眾將又說:“可以上馬了。”曹操說:“還不到時候。”過了一會兒,前來的袁軍騎兵越來越多,開始有人分頭去取物資。這時曹操說:“可以了。”於是將士們全部上馬參戰。
當時 曹操只有不足六百名騎兵,全部出動攻擊,大敗袁軍,斬殺了文丑。顏良、文丑都是袁紹手下的名將,兩次作戰就被擒殺,袁紹的軍隊大為震動。 曹操率軍回到官渡駐紮。袁紹進軍保衛陽武。關羽趁機逃走,回到劉備那裡。
八月,袁紹把陣營連在一起,逐漸向前推進,依靠沙灘駐守,東西綿延幾十裡,曹操也分別紮營與袁軍對抗,交戰不利,當時曹操的軍隊還不到一萬人,十之二三計程車兵有傷。
袁紹又進逼官渡,修建土山和地道。曹操也在營壘中的相應地點修建土山、地道,來抵擋敵人。袁軍向營中射箭,箭如雨下,營中行走的人都用盾牌遮掩身體,眾人都很恐慌。
當時曹操的糧草不足,寫信給荀彧,商量準備退回許都。荀彧卻說:“袁紹把全部兵力聚集在官渡,準備與您決出勝負。您以極弱小的兵力去抵擋最強大的敵人,如果不能制服他們,就一定會被敵人壓倒,這是得失天下的關鍵時刻。況且袁紹不過是個平庸的首領罷了,他能收集人才,卻不會合理使用。憑藉您的英明神武,再加上出兵順應人心,做什麼會不成功呢!”曹操聽從了建議。
孫策聽說曹操和袁紹相互對峙,心中一喜覺得機會來了就謀劃襲擊許都,因為孫策仇家太多出門也不像曹操劉備那樣喜歡帶護衛,所以還沒有出兵便被刺客殺死了。
汝南投降的賊寇劉闢等叛變,響應袁紹,在許都城下劫掠。袁紹派劉備去援助劉闢,曹操派曹仁把他打敗。劉備又逃走,曹仁最終攻破了劉闢的大營。
袁紹的運糧車來了幾千輛,曹操用荀攸的計謀派徐晃、史渙前去劫擊,大敗袁軍,燒燬了他們全部的運糧車。曹操與袁紹相持了幾個月,雖然每次作戰都能殺死敵將,但是士兵太少,糧草用盡,戰士疲憊不堪,曹操對運糧的人說:“再過十五天,我為你們打敗袁紹,就不用再讓你們這麼辛苦了。”
冬季十月,袁紹派車輛去運糧,讓淳于瓊等五人率領一萬多名士兵護送,駐紮在袁紹大營以北四十里。袁紹的謀臣許攸與袁紹不合,就前來投奔,順勢勸曹操攻打淳于瓊等人。
曹操身邊的人懷疑許攸,只有荀攸、賈詡支援曹操出兵。曹操就留下曹洪守營,親自帶領步兵、騎兵五千人乘夜色前往,天剛亮就到了。淳于瓊等人看見曹操兵少,就出兵在營門外擺開陣勢。曹操猛攻敵軍,淳于瓊退回堅守營壘,曹操就攻打軍營。袁紹派遣騎兵來救淳于瓊。身邊有人對曹操說:“賊寇騎兵逼近了,請分出一支部隊去擋住他們。”曹操生氣地說:“敵軍到了背後,再來報告!”士兵們都拼死作戰,大敗淳于瓊等人,將他們全部斬首。
袁紹最初聽說曹操去攻打淳于瓊時,對他的長子袁譚說:“趁著他去攻打淳于瓊等人,我去攻佔他的大營。他就無處可歸了!”於是他派張郃、高覽去攻打曹洪,但是張郃等人聽說淳于瓊被消滅,就投降了。
袁軍大潰敗,袁紹和袁譚拋下軍隊逃走,渡過了黃河。曹操追趕他們,卻沒有追上,就把他們的輜重、地圖、文書、珍寶全部繳獲了,還俘虜了許多士兵。曹操在繳獲的袁紹文書中,找到了許都和軍中的人寫給袁紹的書信,但是他都給燒了。冀州各郡多有獻出城池投降的人。
當初,漢恆帝時有一顆黃星出現在楚、宋兩地的分界處,遼東人殷馗精通天文,預言五十年後會有真命天子在梁、沛之間興起,他的鋒芒不可抵擋。到現在已經五十年了,曹操打敗了袁紹,天下沒人能與他抗衡了。
建安六年夏季四月,曹操出兵到黃河邊,攻打袁紹在倉亭的駐軍,再次攻破。袁紹回去以後,重新收集逃散計程車兵,平定了反叛他的各個郡縣。
九月,曹操回到許縣。袁紹還沒有被打敗時,派劉備去攻取汝南。汝南的賊寇共都等人響應他。曹操派蔡揚去攻打共都,沒有取勝,被共都打敗了。曹操向南親征劉備。劉備聽說曹公親自出徵,逃走投奔了劉表,共都等人都潰散了。
建安七年春季正月,曹操的軍隊駐紮在譙縣,釋出命令說:“我興起義兵,為天下除去暴亂。故鄉的人民,差不多死光了,在郡國境內走上一天,也見不到一個認識的人,這讓我非常傷感。自從興義兵以來,將土盡絕了後代的,就尋找他們的親戚做他們的後嗣,分給土地,官府提供耕牛,設立學校,派遣老師教育他們。幫助活下來的人建立宗廟,讓他們能祭祀自已的祖先,如果死者顯靈的話,我死後又能有什麼遺憾呢!”於是曹公到浚儀,修治睢陽渠,派使者用太牢祭祀橋玄。接著又進軍官渡。
袁紹自從軍隊被打敗後,得了重病,嘔吐鮮血,在夏季五月時死去。他的小兒子袁尚承襲了他的官爵,袁譚自稱車騎將軍,駐紮在黎陽。秋季九月,曹操去征討他們,接連作戰。袁譚、袁尚接連敗退,堅守不出。