公元231年春季,蜀汉丞相诸葛亮再次挥师北伐,这次行动他采用了改良的木牛流马运输粮草,沿祁山道进军,这已是诸葛亮第三次踏上祁山征途。诸葛亮的目标是祁山堡,这座军事堡垒是曹魏抵御蜀汉的关键据点。魏明帝曹睿闻讯后,立即派遣司马懿率军前往长安迎战。司马懿带着张郃、费曜、戴陵、郭淮等将领奔赴陇右,先派费曜和戴陵率领四千精兵驻守上邽,自己则率主力紧随其后。诸葛亮得知这一部署后,留下王平继续围攻祁山堡,亲率主力北上上邽。然而,当他们抵达上邽附近的麦田时,麦子尚未成熟,无法收割利用。司马懿深知蜀军长途跋涉,粮草补给困难,渴望速战速决,同时魏军经过连夜行军已疲惫不堪,因此他选择凭险固守,拒不出战。诸葛亮眼见麦子成熟无望,僵持毫无意义,加上粮草日渐匮乏,只得率军撤退。
诸葛亮率军撤回卤城,这座城池是蜀军此前在祁山堡东北方向修建的营地,作为北伐的前线大本营。司马懿尾随蜀军,在卤城正北安营扎寨,与汉军形成对峙局面,但他依然坚持不出战。此时,王平仍在攻打祁山堡,但久攻不下。张郃建议司马懿将军队分驻要地,派出奇兵包抄蜀军,截断其后路,但司马懿不予采纳。魏军将领们多次请战,司马懿都严词拒绝,这引发军中不满,有人嘲讽道:“公畏蜀如虎,奈天下笑何?”对峙一段时间后,诸葛亮撤除对祁山堡的包围,将全部兵力集中在卤城。司马懿趁机派张郃打通与祁山堡的联络,并命他进攻卤城以南的王平,自己则率主力攻打卤城以北的诸葛亮,打算实施钳形攻势,一举击溃蜀军。然而,诸葛亮早有准备,他派大将魏延、高翔、吴班分三路迎战,大败魏军,取得一场关键胜利。
时间进入公元231年6月,蜀军形势突变。负责督运粮草的李严未能按时供应军需,蜀军粮草告急。更关键的是,诸葛亮收到后主刘禅下令撤退的旨意,只得无奈引军退回。司马懿命令张郃追击,张郃虽不赞同追击未败而退的蜀军,但在司马懿的坚持下,他只能领兵前进。最终,在木门道,张郃被埋伏在山上的蜀军射中右膝,伤重身亡。原来,诸葛亮进攻祁山时,李严留守成都掌管运粮事务。正值春雨连绵,李严担心运粮受阻,便派参军狐忠和督军成藩前往卤城,假传刘禅旨意,迫使诸葛亮撤军。诸葛亮奉旨退回汉中后,李严故意质问:“丞相为何退军?后方粮草充足啊!”他还试图杀死督运粮草的岑述,以掩盖自己的失职,并向刘禅谎称:“丞相退军是假装退却,是诱敌深入之计。”诸葛亮拿出李严前后亲笔所写的信函和书奏,证据确凿,李严最终认罪,被罢官削爵,流放梓潼郡。