建兴8年秋天,魏国大将曹真上表请求讨伐蜀国。魏主封他为征西大都督,司马懿为副都督,引兵四十万从长安出发,攻取汉中,并令郭淮领军支援。孔明见魏军来攻,叫王平、张嶷领一千兵去陈仓古道防守,二人觉得一千兵难以挡住四十万魏军,不肯去。孔明说他夜观天象,此地将会连下大雨,魏军必然不敢来攻蜀国,二人才去了。
曹真领兵驻扎于陈仓,果然连下大雨,平地水深三尺,魏兵无法睡觉,马无草料,军无战心。魏主命令撤兵。孔明知司马懿有埋伏,也不追赶。曹真见蜀兵不追,便将埋伏的人马撤回。司马懿说蜀军将从两谷出兵夺祁山,曹真不信。两人打赌,各守一个谷口。
曹真连守七日未见蜀军出现,便放松了警惕,结果被蜀军包围,魏将秦良被杀,司马懿派人将曹真救出。孔明得胜,领军又出祁山,曹真赌输了,一气之下竟卧病不起。孔明又写了封信送给曹真,信中贬曹真无能,不识天文地理,以至折兵损将,曹真看罢,气得大叫一声,死于军中。
魏主催司马懿出战,司马懿要与孔明先斗阵法。孔明摆出八卦阵,冲阵的魏军都被捉住了。孔明却不杀他们,给他们脸上涂上墨,光着上身放了回去。司马懿怒气冲天,令三军一齐冲阵,不料关兴、姜维杀来,魏军三面受敌,司马懿拼死杀出,已伤亡了一大半人马。都尉苟安解送粮草误了十天,孔明要按军法斩他,长史杨仪替他求情,孔明便让军士打了他八十军棍。苟安心里怀恨便投降了魏军。司马懿让他去成都散布谣言说:“孔明早晚要篡位自立为皇帝。”刘禅听信谣言,下诏召回了孔明。孔明为防备司马懿追击,下令各军撤退时今日掘一千灶,明日掘两千灶,后日掘三千灶,用减兵添灶之计迷惑司马懿,使他不敢追赶。
孔明回到成都,朝见后主刘禅,奏问有何大事,刘禅支吾其词,答非所问。孔明召唤众官查问,才知是苟安散布流言。急派人捉苟安,苟安已投靠魏国去了。孔明便把传播流言的宦官杀了。
建兴九年二月,孔明再一次出兵伐魏。司马懿令张颌领兵在祁山阻挡蜀军,自己则和郭淮领兵保护天水各城。到了收麦季节,司马懿对先锋张颌说:“孔明这次来,一定会抢割陇西小麦,来补充他的军粮。你可以到祁山扎营,我巡察天水各郡,防止蜀军偷割小麦。”孔明到了祁山,安完营寨说:“现在营中缺粮,几次派人催促李严,他也没有把粮食运来。陇西一带小麦快熟了,我们暗中派人去割吧。”到了卤城,卤城太守说:“陇上麦子熟了,可是司马懿正领兵在那里驻守。”孔明听了,吃惊地说:“司马懿实在不好对付,他竟会事先料到我来割麦!”孔明心想,如果派军兵与司马懿厮杀,肯定不行,还是用计赢他为妙。于是便下令准备三套同样的车马,又叫关兴扮作天蓬元帅模样,手擎七星黑幡,在车前引路;叫二十四名身强力壮的军士身穿黑衣,披散着头发,光着脚,手拿宝剑,扮作推车使者,在两边推车。身后,有一千名军士护车,五百名军士擂鼓。装扮好后,孔明留下三万军士准备割麦,自己坐上四轮车,往魏营奔去。又令姜维、魏延、马岱三人都装扮成自己的模样,以迷惑敌军。
第二天,下着小雨,天色阴暗,魏军见孔明坐车而来,便一齐追赶。孔明见魏军追来,叫人掉转车子,向来时方向退走。魏军向前追了三十多里地,转过一个山坡,只见孔明的车子隐进树林里去了。想再往前追,又怕中了埋伏。正犹豫不决时,司马懿领大队人马来了。走出七八里地,前边又响起震天鼓声,只见一队蜀兵拥出一辆四轮车来,和前几辆一样。魏兵见推车的人模样吓人,以为是鬼神出现,吓得各自奔逃。三万蜀军却迅速将陇西的麦子割得一干二净。司马懿抓到一个蜀兵,详细盘问才知道前几天是蜀兵假扮神兵割了麦子,不禁又气又恨。又见蜀兵在卤城打麦子,便引兵去偷袭。孔明料定魏军要来攻城,便在城外埋伏了军马,内外夹攻,魏军死伤很多。这时运送粮草的李严来信告急,说魏、吴联合进攻蜀国。孔明担心东川安全,便令立即撤军。
张颌见蜀兵撤退,急忙来报告司马懿:“蜀兵已经从祁山撤走,不知是什么意思。”司马懿说:“孔明诡计很多,不要去追赶。”孔明在卤城等兵马退走了以后,把杨仪、马忠两人叫到帐内说:“你们带上一万弓弩手,去剑阁木门道埋伏。如果魏兵追到,先滚下木头石块,截断他们的退路,再一齐用箭去射。”然后,孔明命人在城内点着几堆柴草,在城墙上插满旌旗,就带上大队人马向木门道退去。
魏兵得知蜀军撤退,忙向司马懿报告说:“蜀军大队人马已经撤走了,但不知城中还有多少兵。”司马懿向众将领问道:“孔明退走了,谁敢去追?”张颌要领兵追赶,司马懿知他性情急躁,便一再告诫他小心孔明的埋伏。张颌自恃勇猛过人,不以为然,一路急追,途中受到魏延与关兴的轮流拦截,蜀军大队人马依次撤退,张颌又急又恨,傍晚,追到木门道时,忽然火光冲天,大石滚滚而下,断了退路。张颌再往两边一看,都是峭壁,实在无处可逃。他正焦急间,忽听一声梆子响,两边山上万弩齐发,将张颌的兵马全部射死了。
后边的魏兵追到木门道时,见路口被塞断了,知道张颌中了计。他们正想往后退,忽听山头上蜀兵喊道:“诸葛丞相要与你们说话。”魏军将士抬头一看,只见孔明站在火光之中,朝下指着说:“我今天打猎,本想射一匹‘马’却误中了一只‘獐’。你们都安心回去吧,告诉司马懿,我早晚要捉住他!”
司马懿领兵出来接应张颌,在路上遇到退回的魏兵,才知道张颌被射死了。损失了这样一员大将,司马懿非常悲痛。蜀兵退走后,他带上张颌的遗体,也返回了洛阳。
孔明回到汉中,才知道根本没有东吴进犯的事。原来是负责军粮的李严因未办好军粮,怕孔明治罪,写假信告急,骗孔明回来。孔明要斩李严,众将代他求情,孔明只好放了他,免去官职,降为平民。