魏軍到來，當時諸葛亮不用宿將魏延、吳懿等為先鋒，而是派參軍馬謖領副將牙門將、裨將軍王平到街亭防禦張郃，另派高翔屯兵列柳城；另一方面，南安郡人帶著漢軍攻打隴西，當地太守游楚與吏民策劃，先作堅守，若漢軍真能攻下西來的魏援則投降也不遲，他於是遣長史馬顒出門設陣，自己向來到的漢軍說：「卿能斷隴，使東兵不上，一月之中，則隴西吏人不攻自服；卿若不能，虛自疲弊耳。」漢軍於是退去。
而到達街亭的馬謖不遵循諸葛亮的部署，舉措煩擾，又不接受王平的勸阻，不在當道之處下寨，反而捨水上山設陣。當張郃到來，他先將漢軍包圍在山上，又切斷水源，再督軍大舉進攻，漢軍大敗，馬謖逃走，眾軍各自逃亡，只有王平領著千人，鳴鼓自守，而張郃又疑漢軍有伏兵，不作追擊，於是王平集合分散的軍隊，向諸葛亮大軍處撤退[2]。街亭失守，駐屯在列柳城的高翔所部又被魏雍州刺史郭淮攻破，漢軍失掉有利形勢，諸葛亮惟有將西縣千多家人帶還漢中，班師撤退，至於隴西遊楚等亦因此成功固守。而趙雲、鄧芝的疑兵亦在箕谷無法抵禦曹真的主力軍，趙雲便收集士卒倚勢固守，將棧道燒毀，所以沒有太大的損失。
蜀漢建興六年(228年)冬天，諸葛亮復出兵散關，不過郝昭已築陳倉城防備，諸葛亮曾派郝昭同鄉靳詳於城外數次游說郝昭投降，但郝昭拒絕。諸葛亮便率軍包圍陳倉。漢軍沒有以大軍進攻，而是先用雲梯、衝車攻城，郝昭便用火箭射雲梯，當雲梯燃燒時，梯上的人便被燒傷，又以繩綁著石磨，掉下城牆，壓毀衝車。諸葛亮便轉用井闌在百尺外向城中射箭，掩護士兵用土填平護城河，想直接攀城，郝昭於是建起內牆，令井闌失效。諸葛亮又挖地道，想突襲城中，郝昭又在城內挖下橫壕溝，擋下地道。雙方激戰二十餘日未有勝負，曹真派費曜等率軍來救，曹叡又派張郃攻諸葛亮，但張郃軍未到，諸葛亮已經因糧盡而撤退。在撤退過程中，成功擊殺上前來追擊的魏將王雙[4]。
《三國志》載諸葛亮臨終決定以長史楊儀、司馬費禕統領各軍撤退，魏延斷後，姜維次之。然而前軍師魏延不同意撤軍，加之魏延與楊儀積怨甚久，致使雙方發生爭鬥，最後魏延失敗，在逃回漢中的途中被平北將軍馬岱所殺。《魏略》則載諸葛亮患病，命魏延等人受領遺命密不發喪，並令魏延攝行己事。楊儀害怕魏延在得勢後將不利自己，於是散布魏延造反的流言，起兵追而殺之。蜀漢因此折損一大將。