劉表則響應了袁紹攻曹的號召,派人策動諸州郡陰謀反曹,而陽安都尉李通則拒絕了袁紹、劉表的反曹號召。除了陽安郡之外,豫州的其余諸郡大多響應袁紹的號召。
關中諸將表示中立,既不助袁,也不助曹。
十一月,張繡準備同意,賈詡卻當著張繡的面回絕了袁紹的來使,準確地指出袁紹不能容人,而投降曹操有三點優勢:曹操挾天子令諸侯,名正言順;曹操兵力較弱,更愿意拉攏盟友;曹操志向遠大,一定能夠不計前嫌。張繡聽從賈詡的建議,率眾歸順曹操,被拜為揚武將軍。
戰爭過程
前期
建安五年(200年)正月,車騎將軍董承、偏將軍王服、越騎校尉種輯接受了漢獻帝的衣帶詔,欲誅殺曹操,但事泄,被曹操夷滅三族。袁紹終于獲得了名正言順的開戰理由,于是,袁紹奉衣帶詔討伐曹操,派陳琳書寫檄文并公開發布,檄文中把曹操罵得無法忍受。袁、曹兩家公開宣戰。
當曹操正部署對袁紹作戰時,參與了衣帶詔之謀的劉備起兵反曹。劉備占領下邳,屯據沛縣(今江蘇沛縣)。劉備軍增至數萬人,并與袁紹聯系,打算合力攻曹。曹操為保持許都與青、兗二州的聯系,避免兩面作戰,于次年二月親自率精兵東擊劉備,迅速占領沛縣,轉而進攻下邳,迫降關羽。劉備全軍潰敗,只身逃往河北投奔袁紹。當曹、劉作戰正酣之時,袁紹別駕田豐建議袁紹“舉軍而襲其后”,但袁紹以幼子有病為辭拒絕采納,致使曹操從容擊敗劉備回軍官渡。
曹操派遣臧霸、孫觀、孫康等人牽制青州刺史袁譚。
二月,袁紹進軍黎陽,企圖渡河尋求與曹軍主力決戰。他首先派大將郭圖、淳于瓊、顏良進攻白馬的東郡太守劉延,企圖奪取黃河南岸要點,以保障主力渡河。
四月,曹操為爭取主動,求得初戰的勝利,親自率兵北上解救白馬之圍。此時謀士荀攸認為袁紹兵多,建議聲東擊西,分散其兵力,先引兵至延津,偽裝渡河攻袁紹后方,使袁紹分兵向西,然后遣輕騎迅速襲擊進攻白馬的袁軍,攻其不備,定可擊敗顏良。曹操采納了這一建議,袁紹果然分兵延津,令正在進攻白馬的郭圖、淳于瓊率軍向西,挺進延津。沮授勸阻袁紹道:“顏良的性格急促狹小,雖然驍勇,但不可以讓他獨自擔任大將。”袁紹不從。
在郭圖、淳于瓊等人率軍奔赴延津后,曹操乃乘機率領輕兵迅速襲擊顏良。曹軍以中郎將張遼、偏將軍關羽為前鋒,曹操親率裨將軍徐晃等人繼其后。關羽望見了顏良麾蓋(大將所乘戎車,設幢麾、張蓋),在張遼軍隊與顏良軍隊交戰之時,關羽策馬沖到顏良身邊,在萬眾之中刺死顏良,又拔出腰間佩刀斬其首級而歸。袁軍諸將都不能擋住關羽。袁軍潰散。
曹操解了白馬之圍后,遷徙白馬的百姓沿黃河向西撤退[21]。袁紹率軍渡河追擊,軍至延津南,派大將文丑與劉備繼續率兵追擊曹軍,曹操當時的騎兵不足六百,駐于南阪(在白馬南)下,而袁軍達五六千騎,尚有步兵在后跟進。曹操令士卒解鞍放馬,并故意將輜重丟棄道旁。袁軍果然中計,紛紛爭搶財物。曹操突然揮動著自己手中所持“麾”。下令發起攻擊。徐晃等人翻身上馬,終于擊敗袁軍,殺了文丑(文丑為亂軍所殺,并不是關羽斬殺),順利退回官渡。顏良、文丑都是河北名將,卻被一戰而斬,袁紹軍隊的銳氣被挫傷。