公元200年二月,一代枭雄袁绍统率大军浩浩荡荡进驻黎阳,欲与曹操逐鹿中原。袁绍派遣颜良袭取白马(现在的河南滑县东南),正式揭开了官渡之战的序幕。
同年四月,曹操自领大军挥师北进,以解白马之围。曹操听从手下谋士荀攸的建议,采用声东击西之计,先向白马以西的延津进军,营造曹军将要北渡黄河,从侧翼包抄袁军后方的声势,待到袁绍分兵救援,然后勒马衔枚、日夜兼程折向东方解救白马。
曹军果然杀了个措手不及,围困白马的袁军只得匆忙迎战,袁军大将颜良被斩杀,袁军只得撤退。曹操深知己方不过侥幸取胜,此非久留之地,于是号令白马军民向后方撤退。袁绍得此情报,再次主动出击,率军渡河追杀到延津之南。在一面山坡之下,曹军不再前进,并且释放牲畜,丢弃辎重。待袁军追赶上来,由于纪律不严,士卒纷纷哄抢曹军丢撒的诱饵,一时间阵形大乱。曹操抓住时机,带领仅有的的600骑兵迅猛杀出,出其不备,斩将搴旗,将袁军杀得落花流水,此役袁绍又失一员干将文丑。袁绍军不免军心动摇。然而双方的态势对曹操而言仍然是敌强我弱,大意不得,于是曹操识相地约束军旅,扼守官渡。
到了八月间,袁绍大军连营结寨,步步紧逼,横亘东西有数十里之广。曹军屡战屡败,只得消极防御,寄希望于天赐良机。袁军攻势汹汹,造楼车、堆土山,居高临下地向曹营射箭,曹军将士只得用盾牌蔽体才能走动。但曹操绝不会坐以待毙,曹军制造出一种叫霹雳车的投石器械,发射大石将袁军楼车砸得粉碎。
袁军一计不成、再生一计,指派将士挖掘地道,想用土龙攻击破曹营,曹操不甘示弱,又在营地开挖长壕守株待兔。两军你来我往,相持不下,两个月的时间很快过去了。曹操这边眼看难以维持生活,"百姓疲乏,多叛应绍,军食乏。"看来打消耗战曹操是没有胜算的。雪上加霜的是,袁绍又命刘备去汝南联合刘辟,从曹操背后插刀,幸而曹操派去的曹仁迅速稳定了局面。形势不利,曹操六神无主,写信和留守许都的荀彧商量,信中表示想要撤退。荀彧却胸有成竹,回信道:"您用敌方十分之一的兵力都守了这么久,事情即将出现转机。"喝了点鸡汤之后,曹操鼓足勇气,继续熬下去。不久,命运女神果然眷顾曹操。此年十月,河北地区运来万余车粮食支援袁绍大军,淳于琼负责护送粮草,粮食囤积在乌巢,距离大营四十里。
无巧不成书,袁绍谋士许攸这个人十分贪财,袁绍显然已经喂不饱他了,许攸便毅然决然地来投曹操,作为投名状,献上偷袭乌巢之计。曹操大喜过望,立即亲自率领五千精锐,穿着袁军服饰,举着袁军旗号,借着夜色掩护,抄小路偷袭乌巢。曹军到达目的地后,遍地放火,袁军一时间四面楚歌,淳于琼只得固守在营地。袁绍闻此消息,非但不以为忧,反而灵机一动,认为这正是以牙还牙,偷袭曹操大营的良机,因此不听属下劝谏,仅向乌巢派出少许授兵,而命张郃、高览带领主力部队围攻曹操大营。袁军救兵赶到乌巢后,曹操正在攻打乌巢本营,左右见来势汹汹,请曹操"分兵拒之"。曹操断然拒绝,喝到:"敌人都在背后了,还说这些!"曹军置于死地而后生,反而攻破敌营,斩杀淳于琼,将敌人的后勤物资尽数焚毁。
反观袁军这边,张郃、高览对曹营久攻不下,火上浇油的是,乌巢失守的消息传来,军心动荡。加上郭图谗害张郃,说他幸灾乐祸,图谋不轨。张郃又怒又怕,与高览一起投降了曹操。袁绍方自乱阵脚,如鸟兽散。曹军势如破竹般大败袁军,歼敌七万之众,缴获珍宝无数,袁绍、袁谭父子率残兵狼狈逃回黄河以北。官渡之战以曹军胜利告终,既在意料之外,也在情理之中。
物质条件上,曹操一方不如袁绍,但主观方面,曹操头脑清醒,分析问题精到,又胸怀宽广,从谏如流,善于利用大众心理,充分发挥了人的主观能动对历史的改造作用。而袁绍却几乎就是稳稳当当的反面教材,骄敌轻进、好谋无断,给了敌人以可乘之机。