231年春天,諸葛亮第四次北伐中原,以木牛運糧,包圍祁山。又招攬鮮卑人軻比能,軻比能起兵到石城響應蜀軍。因曹魏大將曹真病重,曹睿改派司馬懿為統帥屯於長安,領張郃、費曜、戴陵、郭淮等人抵抗。司馬懿先派費曜、戴陵與四千精兵前往上邽防守,自己則率其他兵力解救祁山。張郃則認為該分兵駐守雍、郿,但司馬懿認為若分軍不及合軍有利,便向西推進。諸葛亮知道後,留下王平繼續領軍攻打祁山,自己率主力迎戰司馬懿。其後諸葛亮在上邽打敗了魏將郭淮、費曜,並收割了魏軍的麥糧,與司馬懿軍在上邽之東遇上,司馬懿深知蜀軍勞師遠襲,糧食補給困難,因而憑險堅守,拒不出戰,諸葛亮便回軍鹵城。
司馬懿進軍鹵城,但卻登山掘營,與蜀軍對峙,不與交戰。張郃認為蜀軍從遠來攻,「孤軍食少」,必定想要速戰速決。所以應該以大軍屯於此處,然後分為奇兵,包抄蜀軍,截斷其後路。但司馬懿不採納。魏軍將領數次請戰,司馬懿都不准,諸將十分不滿,便譏笑他:「公畏蜀如虎,奈天下笑何!」。在眾將的一再要求下,司馬懿只好派張郃攻於南圍的無當監王平,由案中道進逼蜀軍,自己則率眾迎擊諸葛亮。諸葛亮派大將魏延、高翔、吳班分三路領兵作戰,大敗魏軍,光斬獲魏軍三千多人,獲得戰利品玄鎧五千、角弩三千多。從此司馬懿再不敢輕易出戰。
六月,諸葛亮眼見糧草接應不上,而又收到下令北伐軍撤退的召命,諸葛亮惟有引軍退回。司馬懿欲遣張郃追擊蜀軍,張郃認為「圍師必闕,歸師勿遏」,不贊同追擊未被被打敗而主動撤退的蜀軍。但司馬懿堅持要張郃領兵追擊,張郃無奈前往追擊。最後於木門道,被埋伏於高處的蜀軍射中右膝,傷重病逝。