蜀汉建兴七年夏四月,诸葛亮在祁山分兵三寨,专门等待魏军。而司马懿引兵至长安,与张合会合后,命令张合为先锋,戴陵为副将,率领十万大军前往祁山,于渭水南岸扎营。郭淮和孙礼也加入了大营。
司马懿询问他们是否与蜀军交过战,两人回答说没有。司马懿分析说:“蜀军千里迢迢而来,利在速战速决。现在他们却不主动出战,必定有阴谋。陇西各路有没有消息传来?”郭淮回答说:“我们已经派细作探得各郡都在严密防守,并无异常。只是武都、阴平两处还没有回报。”
司马懿决定自己派人与孔明交战,同时命令郭淮和孙礼从小路去救援武都、阴平,并趁机袭击蜀军的后方。他认为这样蜀军必定会自乱阵脚。于是,郭淮和孙礼领兵五千,从陇西小路出发去救援两郡并袭击蜀军。
然而,在他们行进的途中,突然接到哨马的报告,说阴平已经被王平攻破,武都也已经被姜维攻破。而且蜀军离他们并不远。孙礼听到这个消息后说:“既然蜀军已经攻破了城池,为什么还在外面陈兵?这其中必定有诈。我们不如赶紧撤退。”郭淮同意了他的意见。
就在他们准备传令撤军的时候,突然一声炮响,山背后闪出一支军队来。旗上写着“汉丞相诸葛亮”,中央一辆四轮车上坐着孔明,左边有关兴,右边有张苞。郭淮和孙礼看到这一幕后大惊失色。孔明大笑着说:“郭淮、孙礼休想逃跑!司马懿的计策怎么能瞒得过我?他每天派人前来挑战,却让你们袭击我们的后方。但武都、阴平已经被我们攻取了。你们二人如果不早点投降,还想驱兵与我们决战吗?”
郭淮和孙礼听后非常恐慌。突然背后喊声震天,王平、姜维引兵从后面杀来。关兴、张苞二将又引军从前面杀来。两下夹攻之下,魏兵大败而逃。郭淮和孙礼弃马爬山而逃得性命。张苞在追赶过程中不慎连人带马跌入山涧内受伤被送回成都养病。
郭淮和孙礼逃回去后向司马懿报告了战败的情况以及武都、阴平两郡的失守。司马懿并没有责怪他们而是说:“这不是你们的过错而是孔明的智谋高于我们。我们可以再引兵守把雍、郿二城不要出战。我自有破敌之策。”于是二人领命而去。
接着司马懿又召来张合和戴陵吩咐说:“现在孔明得到了武都、阴平两郡他必然会安抚百姓以稳定民心不会留在营中。你们二人各引一万精兵今夜出发抄在蜀兵营后一起奋勇杀敌。我会在前面布阵只等蜀兵势乱就大举进攻。两军并力一定能够夺回蜀寨。如果我们能够占据这里的有利地形破敌就易如反掌了。”张合和戴陵领命引兵而去。
他们分别从小路进发深入蜀兵之后。三更时分他们来到大路上两军会合并从蜀兵背后杀来。然而他们行进不到三十里就发现前军无法前进了。张合和戴陵亲自上前察看只见数百辆草车横截去路。张合说:“这必定是孔明的计策我们赶紧找路退回吧。”然而就在他们准备撤军的时候突然满山火光通明鼓角齐鸣伏兵从四面八方涌出将二人围住。
孔明在祁山上大声喊道:“戴陵、张合你们听好了!司马懿料定我会去武都、阴平安抚百姓不在营中所以派你们二人来劫我的营寨。但你们却中了我的计策!你们二人只是无名小卒我不忍心杀害你们。赶快下马投降吧!”
张合勃然大怒,指着孔明破口大骂:“你这山野村夫,竟敢侵犯我们大国的领土,还敢说出这种大话!我要是捉到你,一定将你碎尸万段!”说完,他纵马挺枪,直接向山上冲去。山上的蜀兵箭如雨下,张合无法攻上山去,于是他挥舞长枪,在万军之中左冲右突,无人能挡。蜀兵将戴陵团团围住,张合见状,急忙沿着原路返回,但没找到戴陵。他毫不畏惧,再次杀入重围,成功救出戴陵并撤回。
孔明在山上看到张合在万军之中英勇奋战,不禁对左右说:“以前常听人说张翼德大战张合时,人们都非常惊恐。我今天亲眼所见,才知道他确实勇猛无比。如果我们留下这个人,他必将成为蜀中的大患。我必须除掉他。”于是孔明下令收兵回营。
与此同时,司马懿已经布好阵势,只等蜀兵一乱就发动攻击。但突然看到张合和戴陵狼狈地逃回来,报告说:“孔明早有防备,因此我们大败而归。”司马懿大吃一惊说:“孔明真是神人啊!我们不如先撤退。”于是立即传令全军撤回本寨坚守不出。
孔明大胜后缴获了大量的器械和马匹不计其数。他率领大军回到营地后每天派魏延前去挑战但魏兵就是不出战。一连半个月双方都没有交战。孔明正在帐中思考对策时突然接到天子派来的侍中费祎携带的诏书。孔明将费祎接入营中焚香礼拜后打开诏书阅读。诏书中说:街亭之战的失败责任在马谡而你孔明也承担了部分责任自我贬抑。这违背了我的心意现在恢复你丞相的职位你不要再推辞了。前年你出征时斩杀了王双今年又出征使郭淮败逃;你降服了氐、羌两个民族并复兴了二郡:你的威名震慑了凶暴的敌人功勋卓着。现在天下纷扰元凶尚未铲除你身负国家重任却长期自我贬损这不是光扬国家的伟大功业啊。现在我恢复你丞相的职位你不要再推辞了!”
孔明听完诏书后对费祎说:“国家大事尚未完成我怎么能恢复丞相的职位呢?”他坚决推辞不受。但费祎劝道:“丞相如果不接受职位就违背了天子的意愿也会冷落了将士们的心。你应该暂且接受这个职位。”孔明这才拜谢接受。费祎告辞离去。
孔明见司马懿坚守不出便思考出一条计策。他传令全军拔寨而起装作要撤退的样子。这个消息很快就被司马懿的细作探知并报告给他。司马懿说:“孔明一定有什么大计我们不能轻举妄动。”但张合却说:“这肯定是因为他们的粮食吃完了才撤退的我们应该立即追击。”然而司马懿却认为孔明去年大丰收今年麦子又熟了粮食应该很充足。即使转运困难也能支撑半年时间他不可能轻易撤退。这一定是孔明看到我们连续几天不出战故意用计引诱我们。于是司马懿派人远远地去侦察孔明的动向。
侦察兵回报说孔明在离此三十里的地方扎下了营寨。司马懿说:“我猜孔明果然没有撤退。我们应该继续坚守寨栅不能轻易进攻。”就这样过了十天仍然没有任何动静也不见蜀军来挑战。司马懿再次派人去侦察回报说蜀军已经拔营起寨了。但司马懿仍然不信他亲自换上普通士兵的衣服混杂在军队中前去察看。果然发现蜀军又后退了三十里扎下了新的营寨。
司马懿回到营地后对张合说:“这是孔明的计策我们不能追赶。”又过了十天再次派人去侦察回报说蜀军又后退了三十里扎下了营寨。张合说:“孔明用缓兵之计逐渐退向汉中。都督为什么怀疑不早点追击呢?我愿意带领一支部队去决一死战!”但司马懿仍然认为孔明诡计多端如果贸然追击可能会中他的埋伏导致不应有的损失。他说:“孔明诡计极多如果我们有差池就会丧失我军的锐气。因此我们不能轻举妄动。”然而张合却坚持要去他说:“如果我去打败了甘愿接受军法处置。”司马懿见张合如此坚决便说:“既然你要去我们可以分兵两路你带一路先行但要奋力死战。我随后接应以防有伏兵。你明天先进到半路驻扎后天交战这样可以使我们的兵力得到休息。”于是他们分兵完毕。
第二天张合和戴陵带领数十名副将和三万精兵奋勇前进到半路扎下了营寨。而司马懿则留下大量的军队守寨自己只带领五千精兵随后跟进。
孔明秘密派人侦察,发现魏兵在半路上休息。于是,当夜孔明召集众将商议对策,他说:“现在魏兵来追,必然会拼命战斗,你们需要以一当十。我将用伏兵截断他们的后路——这个任务非智勇之将不能担当。”说完,他目光看向了魏延。魏延低头不语。这时,王平站出来说:“我愿意担当此任。”孔明问:“如果失败了怎么办?”王平回答:“我愿意接受军法处置。”孔明赞叹道:“王平肯舍身亲冒矢石,真是忠臣啊!但是,魏兵分成两路前后夹击,我们的伏兵在中间,王平即使智勇双全,也只能挡住一路,无法分身两处。我们还需要再找一位将领同去。”这时,张翼站出来说:“我愿意前往!”孔明看着他,说:“张合是魏国的名将,有万夫不当之勇,你不是他的对手。”张翼说:“如果失败了,我愿意献上我的首级。”孔明说:“既然你敢去,那就和王平各带一万精兵埋伏在山谷中,等魏兵追上来,让他们全部过去,然后你们从后面发动攻击。如果司马懿随后赶来,你们就分兵两头:张翼引一军挡住后队,王平引一军截住前队。两军必须死战,我自有别的计策相助。”两人接受了任务,带兵离去。
孔明又召来姜维、廖化,交给他们一个锦囊,说:“你们带三千精兵,隐藏在前山之上。如果看到魏兵围住王平、张翼,情况十分危急,你们不必去救,只需打开锦囊看里面的计策,自有解救之法。”两人也接受了任务,带兵离去。
接着,孔明又命令吴班、吴懿、马忠、张嶷四将,低声吩咐道:“如果明天魏兵到来,锐气正盛,你们不可直接迎战,应该边战边退。只等看到关兴引兵来掠阵时,你们就回头追杀,我自有兵马接应。”四将也接受了任务,带兵离去。最后,孔明召来关兴,吩咐道:“你带五千精兵,埋伏在山谷之中,只等看到山上红旗摇动时,就引兵杀出。”关兴也接受了任务,带兵离去。