建兴八年(公元230年),魏主曹睿拜曹真为大司马、大都督,司马懿为大将军、副都督,刘晔为军师,率军四十万,来攻打蜀汉的汉中。
魏军已到陈仓城,诸葛亮却并不着急,只派张嶷、王平二将各领一千军守住陈仓古道,原来他夜观天象,推测出下个月必降大雨,魏军不能进军。
司马懿也推测出要下大雨,因此进入陈仓城后,并不敢继续进军,只在城中驻扎下来,果然不到半个月,就下起了大雨,并且一连下了三十天,城外“平地水深三尺”,士兵连个干燥的睡觉的地方都没有,“昼夜不安”,马匹因为草料跟不上,饿死了许多,无奈,只好上表曹睿,曹睿下诏退兵。
魏兵退走,诸葛亮引军追来,司马懿料到蜀军必来追赶,事先有了准备,自己引军守屯于祁山东箕谷口,曹真引军屯于祁山西斜谷口。
蜀将魏延、陈式不相信诸葛亮推断,不相信司马懿会在祁山两侧部署伏兵,陈式出兵箕谷追赶魏军,中了司马懿埋伏,损失四千多军士,多亏魏延相救,才逃得性命。
诸葛亮问罪于陈式,将其斩首。
而在祁山西侧的斜谷口,诸葛亮引诱曹真出击,曹真令副将秦良攻打蜀军,诸葛亮将其引入埋伏圈,秦良冲不出包围圈,被斩于马下。
诸葛亮令将士换上魏军衣服,扮作魏军回曹真营寨,与自己的另两路人马一起攻向曹真大寨,曹真大败,亏司马懿相救,逃得性命。
诸葛亮写信讥讽曹真,曹真羞愤而死。
曹真已死,只余司马懿一人与诸葛亮对敌,两人进行了一次会战,比拼阵法,司马懿败于诸葛亮,只好闭寨不出。
战场上敌不过诸葛亮,但是司马懿巧施反间计,令蜀军降将在成都散布诸葛亮要谋反的谣言,刘禅上当,召回诸葛亮,于是这次两人的交锋就此结束,算是打个平手。