蜀汉建兴七年夏季四月,孔明的军队驻扎在祁山,分设三个营寨,专等魏军来战。司马懿率军抵达长安,张合前来接见,详细讲述了之前的情况。司马懿命令张合担任先锋,戴陵为副将,带领十万兵马前往祁山,在渭水南岸安营扎寨。郭淮、孙礼入营拜见。司马懿询问他们:“你们是否与蜀军交过战?”二人回答:“还没有。”司马懿说:“蜀军千里迢迢而来,企图速战速决;如今到了这里却不发起进攻,必定有计谋。陇西各路,有没有什么消息?”郭淮说:“已经有人暗中探查到各郡都十分警惕,日夜防范,并无其他事情。只有武都、阴平两处,还没有回音。”司马懿说:“我自有安排,让孔明交战。你们两人急速从小路去救援两郡,然后从蜀军背后突袭,他们必定会自乱阵脚。”二人领命,带领五千兵马,从陇西小路出发救援武都、阴平,准备偷袭蜀军后方。郭淮在路上对孙礼说:“司马懿与孔明相比如何?”孙礼说:“孔明比司马懿强多了。”郭淮说:“孔明虽然厉害,但这一计策足以显示司马懿有过人的智慧。如果蜀军正面攻击两郡,我们从后面偷袭,他们不就乱套了吗?”
正说着,突然有哨马前来报告:“阴平已经被王平攻破,武都也被姜维攻破。前面离蜀军不远了。”孙礼说:“蜀军既然已经攻破城池,为何还陈兵在外?一定有诈。不如赶快撤退。”郭淮听从了他的建议。正当他们下令撤军时,忽然一声炮响,山后闪出一支军队,旗上写着“汉丞相诸葛亮”,中央一辆四轮车,孔明稳坐其上;左边有关兴,右边有张苞。郭淮、孙礼见状大惊。孔明大笑道:“郭淮、孙礼别跑!司马懿的计策,怎么能瞒得了我?他每天让人在前面交战,却让你们偷袭我军后方。武都、阴平已被我攻占。你们还不快来投降,难道想跟我军决战吗?”郭淮、孙礼听后大惊失色。忽然背后喊杀声震天,王平、姜维领兵从后方杀来。关兴、张苞也率军从前方杀来。两面夹击,魏军大败。郭淮、孙礼弃马爬山逃命。张苞看见后,骑马追赶;不料人仰马翻,掉入山涧,后军急忙救起,却发现头已跌破。孔明派人将他送回成都养伤。郭淮、孙礼二人逃脱后,回去见司马懿,报告说:“武都、阴平两郡已失。孔明埋伏在要道,前后夹击,所以我们大败,弃马步行才逃回来。”司马懿说:“这不是你们的错,孔明的智慧在我之前。你们可以再领兵把守雍、郿二城,切勿出战。我自有破敌之策。”二人告辞离去。司马懿又召来张合、戴陵,吩咐道:“如今孔明已经占领武都、阴平,必定安抚百姓以稳定民心,不会留在军营中。你们二人各带一万精兵,今夜出发,抄到蜀军营后,一起勇猛杀来;我则在前面布阵,只等蜀军阵脚大乱,便驱兵进攻。如果能夺下此地的山势,打败敌人就不难了。”二人领命,带领兵马离去。
戴陵在左,张合在右,各自从小路出发,深入蜀军后方。半夜时分,两军在大路上相遇,合兵一处,从蜀军背后杀来。没走多远,前面的军队停了下来。张合、戴陵二人亲自骑马查看,只见数百辆草车横在路中。张合说:“这一定是有准备,赶快撤退吧。”刚下令撤军,只见满山火光冲天,鼓声震天,伏兵四起,将二人围住。孔明在祁山上大喊:“戴陵、张合听我说:司马懿以为我去了武都、阴平安抚百姓,不在营中,所以让你们来劫寨,却中了我的计。你们是无名小卒,我本不想杀你们,快下马投降!”张合大怒,指着孔明骂道:“你这山野村夫,敢侵犯我大魏疆土,还敢如此嚣张!如果让我抓住你,定将你碎尸万段!”说完,纵马持枪冲上山来。山上箭如雨下,张合无法上山,便拍马舞枪,冲出重围,无人能挡。蜀军将戴陵围困在垓心。张合杀出旧路,不见戴陵,又奋勇冲入重围,救出戴陵返回。孔明在山上见张合在万军中穿梭冲突,英勇无比,对左右说:“曾经听说张飞大战张合,让众人都惊讶惧怕。今日见到,才知道他的英勇。如果留下此人,必成蜀中大患。我一定要除掉他。”于是收军回营。
司马懿率军摆好阵势,只等蜀军乱动便发起进攻。忽然张合、戴陵狼狈而来,报告说:“孔明早有防备,所以我们大败而归。”司马懿大惊,说:“孔明真是神人啊!我们还是暂退吧。”于是下令全军退回营寨,坚守不出。孔明大胜,缴获的兵器、马匹不计其数,于是率军回营。每日让魏延挑战,魏军坚守不出。一连半个月,双方都没有交战。孔明在帐中思索,忽然接到天子派侍中费祎送来诏书。孔明将费祎接入营中,焚香礼拜后,打开诏书宣读:“街亭之役,马谡之过;而你引咎自责,深深贬抑自己。一再违背你的意愿,听从你的坚守。前年你大败王双;今年又打败郭淮,使其逃遁;招降氐、羌,收复两郡:威震凶暴之敌,功勋赫赫。如今天下动荡,大恶未除,你肩负重任,是国家的栋梁,却长期自我贬抑,这不利于彰显你的伟大功绩。现在恢复你的丞相职位,望你不要推辞!”孔明读完诏书,对费祎说:“国家大事尚未完成,怎敢恢复丞相之职?”坚决推辞不受。费祎说:“如果你不接受,会违背天子的心意,也会让将士们心寒。暂且先接受吧。”孔明这才拜受。费祎告辞离去。
孔明见司马懿坚守不出,心生一计,传令各处拔寨起行。细作将消息报给司马懿,说孔明退兵了。司马懿说:“孔明必有大谋,不可轻举妄动。”张合说:“这一定是因粮草用尽才撤退,为何不追?”司马懿说:“我料想孔明去年大丰收,今年麦子又成熟,粮草充足;虽然运输困难,但也够半年之用,怎会轻易撤退?他见我们多日不战,所以用此计引诱我们。可派人远远侦察。”侦察兵回报说:“孔明在三十里外扎营。”司马懿说:“我料定孔明不会撤退。暂且坚守营寨,不可轻进。”过了十天,仍无消息,也未见蜀军前来挑战。司马懿又派人侦察,回报说:“蜀军又在三十里外扎营。”张合说:“孔明在用缓兵之计,逐渐撤回汉中,都督为何怀疑,不早追击?我愿前往决战!”司马懿说:“孔明诡计多端,若有所失,会丧我军锐气。不可轻进。”张合说:“若我去战败,愿受军法处置。”司马懿说:“既然你要去,可分兵两路:你先带一路,务必拼死作战;我随后接应,以防伏兵。你明日先行,到半路扎营,后日交战,使兵力不疲。”于是分兵完毕。次日,张合、戴陵带领数十副将、三万精兵,勇猛前进,在半路扎营。司马懿留下许多军队守营,只带五千精兵随后进发。孔明暗中派人侦察,发现魏军在半路歇息。当夜,孔明召集众将商议说:“如今魏军前来追击,必定死战。你们要以一当十,我用伏兵断其后路:非智勇之将不可胜任。”说完,目光看向魏延。魏延低头不语。王平出列说:“我愿前往。”孔明问:“若有闪失,如何是好?”王平说:“愿受军令。”孔明叹道:“王平肯舍生忘死,真是忠臣啊!不过,魏军分两路前后夹击,我伏兵在中;王平虽智勇双全,只能抵挡一路,无法分身。还需再得一将同去才好。可惜军中再无舍死冲锋之人!”话音未落,一将出列说:“我愿前往!”孔明看去,原来是张翼。孔明说:“张合是魏名将,勇猛无比,你不是对手。”张翼说:“若有闪失,愿斩首帐下。”孔明说:“你既敢去,可与王平各领一万精兵埋伏山谷;待魏军追上,任其过去,然后引伏兵从后掩杀。若司马懿随后赶来,分兵两路:张翼抵挡后队,王平截击前队。两军拼死作战,我自有计策相助。”二人领命而去。
孔明又召来姜维、廖化,交给他们一个锦囊,说:“给你二人一个锦囊,带三千精兵,旗鼓皆伏,在前山之上。若见魏军围住王平、张翼,危急之时,不必救援,只开锦囊观看,自有解围之策。”二人领命而去。又令吴班、吴懿、马忠、张嶷四将,低声吩咐:“明日魏军到来,锐气正盛,不可正面迎战,只可且战且退。只等关兴引兵来扰阵时,你们便回军追杀,我自有兵接应。”四将领命而去。又召来关兴,吩咐道:“你带五千精兵埋伏山谷;只看山上红旗摇动,便引兵杀出。”关兴领命而去。张合、戴陵领兵前来,势如风雨。马忠、张嶷、吴懿、吴班四将迎战,出马交锋。张合大怒,驱兵追杀。蜀军且战且退,魏军追赶约二十多里。时值六月,天气炎热,人马汗水如注。追至五十里外,魏军皆气喘吁吁。孔明在山上挥动红旗,关兴引兵杀出。马忠等四将也引兵回身掩杀。张合、戴陵死战不退。忽然喊声震天,两路军杀出,原来是王平、张翼。他们奋勇追杀,截断魏军后路。张合大叫:“众将,此时不决一死战,更待何时!”魏军奋力冲突,无法脱身。司马懿引精兵杀到,指挥众将围住王平、张翼。张翼大呼:“丞相真是神人啊!计策已定,必有良谋。我们当决一死战!”于是分兵两路:王平抵挡张合、戴陵,张翼抵挡司马懿。两头死战,喊杀连天。姜维、廖化在山上观望,见魏军势大,蜀军危急,渐渐抵挡不住。姜维对廖化说:“如此危急,快开锦囊看计。”二人拆开一看,锦囊中写道:“若司马懿围住王平、张翼,形势危急,你们可分兵两路,直袭司马懿大营;司马懿必急退,你们可乘乱进攻。虽不能夺营,但可获全胜。”二人大喜,分兵两路,直袭司马懿营中。
原来司马懿也担心中孔明之计,一路不断派人通报。正在催战之际,忽有流星马报,说蜀军已从两路攻占大寨。司马懿大惊失色,对众将说:“我料到孔明有计,你们不信,勉强追来,坏了大事!”急忙率军退回。魏军惊慌失措,乱作一团。张翼趁机掩杀,魏军大败。张合、戴陵见势孤,也逃往山间小路。蜀军大胜。关兴引兵接应各路。司马懿大败一阵,退回营寨时,蜀军已自行撤退。司马懿收拢败军,责骂众将:“你们不懂兵法,只凭血气之勇,强行出战,导致此败。今后不得轻举妄动,再有不遵,必按军法处置!”众将羞愧而退。这一仗,魏军死伤无数,遗弃马匹器械不计其数。孔明收拢得胜之师回营,又欲起兵进攻。忽然有人从成都来报,说张苞身亡。孔明听闻,大哭不止,口吐鲜血,昏倒在地。众人救醒后,孔明从此卧病在床,无法处理军务。孔明哀伤将士,众将无不感激。
后代有人写诗感慨说:“勇猛的张苞想建立战功,但遗憾的是上天没有帮助他这个英雄!武侯向着西风流下眼泪,是因为他心里悲叹没有人再来辅佐他鞠躬尽瘁了。”