诸葛亮的进攻和得手,一时震动关中,使曹魏政权十分惊恐,魏明帝急忙亲自率军西镇长安,派大将张郃率军阻止诸葛亮。
诸葛亮出祁山,屯兵西县(今甘肃天水西南),命马谡为前锋,王平为副将,督诸军与张郃战于街亭(今甘肃秦安县附近)。马谡平素好发高论,也提过一些好建议,如“攻心为上”即是,但他不精兵法。刘备曾对诸葛亮说过:“马谡言过其实,不可大用。”然而诸葛亮并没有注意刘备的提醒,在关键时刻,错用了他。结果马谡违反诸葛亮的节度,拒听王平的劝止,弃城不守,上山扎营。张郃乘机把蜀军围困于山上,断其水源。蜀军缺水,军心动摇,在曹军的进攻下溃败,马谡逃走,街亭失守。诸葛亮被迫退兵,南安、天水、安定三郡又被魏军夺回,第一次北伐失败。
为了严肃纲纪,以利再战,诸葛亮忍痛依法处死了马谡,自己又以统帅身份,主动承担责任,上疏后主,自降三级。随即在这年冬天,诸葛亮又率军,发动了第二次北伐曹魏之战。
蜀军出散关(今陕西宝鸡西南),围陈仓(今陕西宝鸡东)。时曹魏已有准备,魏将郝昭凭险据守,历时20多天。由于蜀国多山,蜀道艰险,这时军粮供应不上,诸葛亮再次被迫退军,并于归途中设伏杀跟后追击的魏将王双,第二次北伐仅以此结束。
建兴七年(229年)春,诸葛亮第三次北伐,遣陈式攻武都(今甘肃成县)、阴平(今甘肃文县西北)二郡。魏雍州刺史郭淮领兵欲击陈式,诸葛亮即亲自出兵建威(今甘肃西和北)。郭淮退兵,蜀军遂取武都、阴平二郡。第三次北伐以取得局部胜利结束。
建兴八年(230年),曹魏采取主动行动,发兵进攻汉中。
诸葛亮急调两万援军阻击。后因雨路阻,魏军退回。
建兴九年(231年),诸葛亮第四次出师,再围祁山。鉴于蜀道山多路险,以前的北伐多因军粮运送困难而受严重影响,诸葛亮为解决这个难题,发明了一种适合山道的叫“木牛”的运粮车,向前方运粮。魏明帝闻祁山被围,忙派足智善算的司马懿迎击。诸葛亮留下部分军队继续包围祁山,自率主力东上寻找司马懿决战。两军相遇于上邽(今甘肃天水市)一带。司马懿深知蜀军的粮食供应仍很困难,有意避免决战,扎营坚守,拖延时日。诸葛亮随即改变策略,佯装退兵,诱敌出战。司马懿谨慎尾随,但不主动出击。魏军中一些将领多次请战,均遭司马懿拒绝。于是魏军中有人讥笑司马懿“畏蜀如虎”。司马懿无奈,只好派大将张郃出战,结果被早有准备的蜀军击败,损失3000多人。魏军上当吃亏后再也不敢恋战,而诸葛亮也因此无法消灭司马懿的魏军主力。