曹操當時的處境真的非常艱難。雖然和呂布在大體上打了一個平手,兩個人誰也沒有消滅誰,但曹操也沒有實現把呂布趕走,從他手中奪回兗州的目的。因為戰鬥進行得不順利,再加上災情嚴重,糧食難以籌措,軍隊麵臨著吃不上飯的危險,士氣受到了很大的影響,甚至已經出現了逃兵。
鑒於以上種種情況,曹操認為現在必須繼續保持和袁紹的同盟關係,就算是名義上的也好。這樣去做至少可以讓袁紹保持中立,自己就能積蓄力量,慢慢渡過難關,再徐圖發展。因此,曹操就打算答應袁紹的條件。
正巧在這個時候,出外辦事的程昱回來了,知道了這件事情以後,明確表示不讚成,他勸阻曹操說:“將軍千萬別這樣做,如果真的這樣做了,天下人就會覺得你是在向困難低頭;如果不是的話,你考慮問題怎麼會如此的片麵呢?袁紹向來就有吞並天下的野心,但他的才略和智謀卻並不怎麼樣。將軍自己想一下,你能在他的手底下過日子嗎?兗州現在雖然很殘破,但是起碼還有三座城池在我們的手裏,可以用於作戰的士兵不下萬人。將軍這樣的神武,又有這麼多的文臣武將輔佐,功業是不難建立的,希望將軍再多考慮一下!”
曹操仔細考慮了程昱的話,覺得有道理,就采納了他的意見,果斷拒絕了袁紹的要求。
這年十月,曹操率領軍隊轉移,駐紮在了東阿。因為災荒嚴重,糧價飛漲,所以為了減輕軍隊和百姓的負擔,他把一些新招募的士兵和差役都遣散回家鄉了。
這年年底,徐州牧陶謙病死,死前留有遺言,要劉備接任徐州牧。劉備在陳登、孔融等人的勸告和幫助下,接管了徐州,做起了徐州刺史。
經過了一番艱苦的努力,公元195年春天,曹操重新開始了收複兗州失地的戰鬥。他首先發兵進攻濟陰郡的首府定陶,定陶的長官吳資集中兵力堅守南城,所以沒能攻克。這時候正好呂布率領軍隊前來救援,於是曹操就馬上以呂布為主要的進攻對象,一舉擊敗了呂布。
這一年夏天,曹操帶領軍隊駐紮在乘氏。呂布的部將薛蘭、李封駐守在钜野,曹操發兵攻之,引得呂布率軍隊前來救援。然而,曹操打敗了薛蘭,呂布無奈,看到援救沒有成功,於是率兵逃跑了。曹操就這樣趁機殺死了薛蘭這些人。
就在這個時候,傳來了陶謙病死的消息。曹操認為大可利用這個機會,先攻取徐州,得手後再回來攻打呂布。然而荀彧不同意曹操這樣去做,他以做大事應該先固根本,再圖進取的道理規勸他,又拿漢高祖和光武帝成功的事跡來證明他的話,還為曹操分析了徐州也不可能輕易攻下,而呂布卻可以輕易戰勝的形勢。曹操認真地考慮了荀彧的建議,覺得非常有道理,於是就放棄了攻打徐州的計劃。
沒多久,呂布和陳宮從東緡率領1萬多名軍士前來進攻曹操。曹操決定巧妙利用地形,出奇兵打敗呂布。原來曹軍大營的西邊有一座大堤,大堤的南麵有一片茂密的樹林,幽深莫測。呂布就懷疑其中有伏兵,提醒手下讓他們千萬要提防埋伏,於是大家十分小心地在大樹林以南10多裏的地方駐紮。
第二天,呂布前來攻城,曹操把自己一半的兵力埋伏在大堤裏麵,另一半兵力就暴露在大堤外麵。呂布認為曹操的兵力並不多,就率軍西進,兩軍剛一接觸,早就埋伏在大堤內的曹軍突然一擁而出,步兵和騎兵一起進攻,把呂布打得大敗,一直追到呂布的大營才停止。
呂布打了敗仗之後,根本不敢久留,就連夜撤軍,逃向了定陶。曹操率軍追趕,經過激戰,把定陶攻下。呂布看到大勢已去,就帶著敗將殘兵逃往徐州,去投奔劉備。曹操於是分兵收複了兗州的郡縣。經過1年多的非常艱苦的作戰,曹操終於打敗了呂布,鞏固了自己在兗州的統治地位,並且還得到了朝廷的正式承認。他有了一塊進可攻、退可守的名副其實的根據地。這為他以後不斷向周邊發展,奠定了一個堅實的基礎。