建兴六年(228)春,诸葛亮提前扬声,走斜谷路取赏,让赵云、邓智设疑兵吸引曹真重兵,率军攻祁山。陇右的南安、天水、安定三县反对魏依附蜀,关中震动。魏明帝西镇长安,令张合骑五万,将马谡打至街亭。与此同时,赵云寡不敌众,败给了吉谷。诸葛亮把一千多户人家从西县拉回汉中。第一次北伐失败了。
同年冬,诸葛亮乘邴巍东进之机,趁关中虚弱。他借北伐之机,出兵散关(今陕西省宝鸡市西南),包围陈仓(今陕西省宝鸡市东)。魏将军赵昊拒绝了他,但诸葛亮未能说服他投降,他别无选择,只能返回汉中。魏追被斩。
建兴七年(229)春,诸葛亮派陈石攻武都(今甘肃成县一带)和尹平(今甘肃文县一带)。永州刺史郭淮领兵来救。出至建威(今甘肃省西和县西),郭淮退兵,故得二郡。
建兴八年(230)秋,魏军攻汉中,司马懿去西城(今陕西省安康市西北),张合去伍兹谷,曹真去顾颉。诸葛亮驻扎在城固(今陕西省城固县东)和赤坂(今陕西省洋县东二十里)。大雨下了三十多天,魏军撤退了。同年,诸葛亮派魏延、吴入羌,在渔阳河(在今甘肃武山西南的南安县)打败魏后将军费耀、永州刺史郭淮。
建兴九年(231年)二月,诸葛亮率军攻祁山,开始运牛运木。曹真病重时,关中统帅司马懿拒绝了。诸葛亮在上官(今甘肃天水县)割麦子。司马懿追光至潞城(今甘肃天水市与甘谷之间),挖开营寨,坚守,是“畏蜀如虎”的嘲讽。
据《汉书春秋》记载,同年五月,诸葛亮派魏延、高翔、吴班拒之,司马懿大败。汉军获得第一批3000级甲胄,5000级甲胄,3100弩,于是司马懿回保营。这段史料后来被《子同治简》引用。《晋书》中记载魏军脱甲轻装上阵,在汉阳与诸葛亮相遇。司马懿派大将金牛为诱饵,诸葛亮退守祁山,屯兵鹿城,并依南北两山,阻水筑篱。魏军攻破蜀军,斩获数万。但在陈寿写的《三国志》中,两种说法都没有记载。
六月,李严因漕运不畅,召诸葛亮回师。张合追赶梁,退到木门前,被箭射死。这是他第二次出祁山。
建兴十二年(234)二月,诸葛亮率军出顾颉路。据武五丈原(今陕西岐山南),定居渭滨,在渭南与司马懿会合,与吴相约。在此期间,诸葛亮多次派遣使节发出战书,并饰以女性来激怒司马懿。而司马懿却忍辱负重,用“千里之外作战”的巧妙计策平息了怒火。
司马懿曾向蜀汉的使者询问诸葛亮的睡眠、饮食和工作情况,但没有询问军事情况。使者答道:“诸葛公早起晚睡,二十余棍的刑都是亲自念的;我吃了不到几升的食物。”司马懿告诉人们:“诸葛孔明吃得少,有烦恼。他能活多久!”
诸葛亮分兵平定了田地。他和魏国人民一起种植粮食自给自足,并打算在那里长期居住。然而,诸葛亮却因为过度劳累而病重。