建安四年(公元199 年)八月,听到袁绍要南攻许都的消息后,曹操先进军黎阳(今河南浚县东北)。九月,曹操回到许都,分兵屯守官渡(今河南中牟东北十二里)。到了十二月间,又亲至官渡前线。建安五年正月,又因刘备在徐州举兵,他去徐州亲征刘备。同月,攻破刘备,还军官渡。
袁绍与曹操双方的战争,袁绍是采取攻势的一方,曹操是采取防御性攻势的一方。这时袁绍集中在河北前线的兵力,约有"精兵十万,骑万匹"。曹操集结在官渡一带的军队,最多不会超过三四万人。袁绍进攻的目的是直捣许都,劫夺汉帝。他知道这是攻取曹操的心脏一着,是迫使曹操非堵截不可的,从而可以在自己优势兵力下两军进行决战,最后达到消灭曹操的目的。
袁绍在计划出兵之初,袁绍的监军沮授劝袁绍不要急于决战。他劝袁绍进屯黎阳,以黎阳为最前线,据河而守,然后逐渐向河南推进,并不断派出小股精锐骑兵去骚扰曹操的地盘。沮授认为只要这样,不到三年的工夫,就可以把曹操拖得精疲力尽,一击就垮。袁绍的谋臣田丰也反对决战。他认为袁绍应该"内修农战",来奠定和充实自己的经济力量和军事力量;一方面还要"外结英雄",以便到时机成熟时开辟进攻曹操的第二战场,来夹攻曹操。同时还主张选拔一部分精锐队伍作为机动的奇兵,来骚扰曹操防御较弱的地区,使曹操左右不能相顾。他还指出∶"决成败于一战",这是危险的事;一战而败,懊悔就来不及了。
可是袁绍部下另一部分将领以郭图、审配为代表,则主张迅速决战。他们非要按照兵法上所讲,兵力超过敌人十倍以上,就可以包围敌人;超过五倍以上,就可以发动进攻;兵力相当,就可以进行决战。结果,袁绍采纳了郭图、审配的意见。
袁绍在企图进攻曹操之初,就想在曹操统治区南面开辟第二战场,但是由于曹操已经预料到这一着,而先把吕布、刘备击败或消灭了,因此袁绍不得不把开辟第二战场的希望寄托于刘表和张绣。可是这时荆州统治集团内部矛盾表面化了,长沙太守张羡自建安三年起,就联结长沙、零陵、桂阳三郡,抗拒刘表。刘表出兵进攻张羡,战争尚在相持阶段,没有力量来配合袁绍向曹操进攻。
袁绍没有办法动员刘表开辟第二战场,于是不得不退而求其次,想利用张绣。袁绍派使者去招降张绣,张绣反而听从谋士贾诩的劝告,背叛刘表,投降曹操。这样,袁绍想联络张绣来开辟第二战场的希望,又归于泡影。
在官渡决战前,被曹操所收编的汝南黄巾军刘辟部背叛曹操,响应袁绍。袁绍派刘备率兵前往汝南配合刘辟,进袭许都。刘备进入汝南之后,虽然与刘辟攻下了隐彊(今河南临颖东)等县,但进展不快。曹操派大将曹仁率骑兵堵击,很快就把刘备击败了。刘备回到袁绍官渡大营,急于脱身,劝袁绍让他去荆州说服刘表出兵,袁绍要刘备率部再次赶往汝南,和另一支黄巾军龚都部会合;人数有数千人;攻扰曹操后方,击杀曹操部将蔡阳。可是力量还嫌薄弱,不敢轻袭许都,始终没能形成对曹操夹攻的局面。不久,袁绍在官渡大败,曹操回军进击刘备,刘备就投奔刘表去了。
袁绍要想开辟的第二战场始终没能开辟起来,因而曹操没有后顾之忧,能够集中全力,对付袁绍。这就构成袁曹两方逐鹿中原,曹方获得胜利,袁方终遭失败的原因之一。
曹操自建安四年(公元199年)八月,进军黎阳,据黄河为守。九月,退守官渡。到了建安五年正月,袁绍发表了声讨曹操罪状的檄文。二月,袁绍将军队主力开抵黎阳的黄河北岸,准备渡河南进。又派大将颜良率部围攻驻守白马(今河南滑县东)的曹操东郡太守刘延。到了四月间,曹操为了解白马之围,自官渡率兵北上,而故意进军延津(今河南延津北),装作将袭击袁绍后方的模样,果然吸引袁绍一部分主力向延津移动。于是曹操立即率领轻骑,兼程赶往白马,乘袁军不备,斩了颜良,把白马城内的军民救了出来。袁绍闻讯派兵追来,曹操又斩了袁绍大将文醮,然后退回官渡。
袁绍在公元 200年四月,把军队主力从黄河北岸推向黄河南岸。到了同年的七月,把主力继续推进到阳武(今河南原阳东南,在官渡水北),到了八月,又进至官渡。
根据记载沮授在袁绍面前的分析,此时袁曹双方的情况是∶"北兵(袁绍一方)数众,而果劲不及南;南(曹操一方)谷虚少,而货财不及北。南利在于急战,北利在于缓搏。宜徐持久,旷以日月。"可见这时就袁绍一方的战略来讲,应该采取"敌饥以持久弊之"的方法来对付曹操。而曹操一方的战略,一方面因为处在强敌的进攻面前,若不退让一步,则必危及军力的保存,因此必须诱敌深入,避免不利的决战,等到情况对自己有利时再来进行决战;另一方面由于自己的军粮不足,必须速战速决才有利。因此到了同年九月间,曹操除了同袁绍作了一次小接触之外,始终坚壁不和袁绍交锋,但是这不是消极的防御,而是为反攻和决战做好准备的一种积极防御。
曹操深沟高垒,坚守官渡阵地。袁绍十万大军逼近官渡以后,后方补给线很长,粮食的运输和供应都遇到困难。曹操听从谋士荀攸的建议,趁袁绍方面几千辆运粮的车辆快到官渡的时候,就派部将徐晃前往偷袭,把袁绍这几千车军粮全部烧光。
到了十月间,袁绍重新从河北运到粮食一万多车,他把这些军粮堆在官渡大营北面四十里的乌巢(今河南延津东南),派大将淳于琼统兵万余人驻守乌巢。谋士许攸劝袁绍分遣轻兵袭许,遭到拒绝,愤而投奔曹操,他把袁绍在乌巢屯积军粮的情况告诉了曹操,并劝他进行偷袭。曹操听了大喜,留曹洪、荀攸守营,自己挑选精骑五千人,打着袁军旗号,乘夜赶到乌巢,放火烧粮。到了天亮,淳于琼见曹操兵马不多,出兵迎战,却被曹操击败。淳于琼退保营寨,不再出战,等待袁绍的援军到来。
袁绍听说曹操出击乌巢,认为这倒是进攻曹操大营,击败曹军的好机会。所以他派了大将张部、高览率领重兵去攻打曹操官渡阵地,只调遣了几千骑兵去救援乌巢。曹操指挥士卒,经过苦战,大破袁军,把袁绍的存粮万余车全部烧掉。这一消息传到官渡前线,张郃、高览等看到大势已去,就向曹洪投降了。于是袁绍军心涣散,士卒纷纷溃逃。曹操出兵追击,袁绍和他的长子袁谭只带八百多骑,逃过黄河。余众投降曹操,全部被坑杀。这一战役,曹操先后消灭了袁军主力七万多人。
官渡决战,是统治阶级内部两个政治集团间进行的战争,曹操获胜后坑杀降卒这件事,就显出这种战争的残酷性来。不过曹操在这一战役中,以少击众,以劣势对优势而获胜,造成了封建社会军事史中弱军战胜强军的有名的战例,充分表现了他的军事指挥才能。
从军队的人数来讲,曹操的军队要比袁绍的少得多。从武装配备来讲,袁绍有"铠万领",曹操只有"大铠二十领";袁绍有"马铠三百具",曹操"不能有十具"(。从经济力量来讲.曹操占领的兖、豫二州,不及河北那样富庶,固然这时距离屯田许下已有四五年光景,可是曹操和袁绍相持快到决战阶段时,军粮只够全军吃一个月,而袁绍第一次从河北运来粮食几千车,第二次又运来一万多车,足见曹操的经济力量也远不及袁绍充裕。从双方占领地区的地形形势来讲,曹操占领的兖、豫二州,是四战之地,要巩固起来比较困难;而袁绍占领的河北,有山河之固,所有以上这些条件,曹操都不如袁绍。
但是曹操在政治方面,由于他主观的努力,造成了许多对他有利的条件。他首先推行屯田,解决了流民问题,从而缓和了其统治地区内的紧张的阶级关系;其次,"挟天子以令诸侯";再其次;拉拢了不少地主豪强和门阀士族,并取得他们的支持与拥戴;再其次,当袁、曹战争快要进入决战阶段,军事物资又是极端缺乏之际,曹操却听从赵俨等的建议,缓征绵绢,缓和了阶级矛盾,曹操在决战前是做了充分的政治准备的。而且,曹操能倾听他部下正确的推论和判断,对战争全局作了通盘的检查。为了避免陷入两线作战的不利局面,当机立断地在官渡会战之前,攻取徐州,擒杀吕布,逐走刘备;并选择在荆州牧刘表在荆州和张羡相持不下无法和袁绍配合进攻自己的时候;就和袁绍进行决战。
以曹操的劣势军队,处在袁绍优势军队进攻面前,因为双方强弱不同,弱者为了保存军力,必须先让一步,所以曹操从黎阳退守官渡阵地,不肯前进一步。利用袁绍轻敌的弱点,诱袁军深入,到了袁军主力进逼官渡,曹操始终坚守阵地,避免作战,几达半年之久。最后到了对自己有利的情况,看清袁绍十万大军补给供应上的困难,便乘敌之隙,出奇兵烧掉敌军全部粮食,这样,曹操不但脱出劣势,而且还占了绝对优势。而袁绍反从优势转变为绝对劣势,最后袁军内部分裂,大将降敌,结果全军不战而溃,胜利便属于曹操一方了。曹操所取得的胜利,不能不说是他主观努力和指挥正确的结果。