孔明回到成都,用李嚴的兒子李豐為長史,積草屯糧,養息將士。不覺三年已過,到了建興十一年二月,孔明見兵精糧足,奏請再次北伐。劉禪滿足於一時的太平,不想讓孔明出兵。孔明堅持出兵。太史譙周說:“近來成都屢次出現災異,魏國旺氣正盛,不利伐魏。丞相隻可防守,不可輕舉妄動。”孔明不聽,連夜趕到漢中,與眾將商議出師事宜。忽有人報,關興病亡。孔明哭昏在地,半晌才醒,歎道:“可憐忠義之人,天不給他壽命!這次出師又少一員大將!”他讓薑維、魏延為先鋒,三十四萬蜀軍兵分五路,到祁山會師,李恢運送糧草到斜穀等候。
魏國因去年有青龍從摩坡井中飛出,改元青龍。魏主得知孔明再出祁山,召來司馬懿商量對策。司馬懿說:“臣夜觀天象,中原旺氣正盛,孔明逆天而行,是自取敗亡。臣願前往破敵,保夏侯淵的四個兒子同行。”夏侯淵的四個兒子,長子名霸,次子名威,三子名惠,四子名和。霸、威二人弓馬嫻熟;惠、和二人飽讀兵書。四人經常聲稱要為父報仇,他就保霸、威為先鋒,惠、和為行軍司馬。魏主拜司馬懿為大都督,各處將士都聽他調度。司馬懿來到長安,調來四十萬人馬,都到渭濱下寨。又派五萬人在渭水上搭了九座浮橋,讓夏侯霸、夏侯威過河安營。郭淮、孫禮來到,司馬懿讓他們在北原下寨,深溝高壘,按兵不動。孔明再到祁山,下了五座大寨,自斜穀到劍閣,又下十四座寨,分屯軍馬,為長久計。他得知郭淮在北原下寨,就分派眾將明攻北原,暗燒浮橋,要一舉消滅渡河的魏軍先鋒。司馬懿得知,定計反擊,殺得蜀軍大敗,吳班中箭落水而死。孔明正無計可施,費禕從成都來到,於是就讓他出使東吳,請孫權發兵。他持孔明的書信趕到建業,呈交給孫權。孫權見孔明許他共取中原,平分天下,就計劃調動三路大軍,分取新城、襄陽、淮陽。孫權問:“孔明用誰為先鋒?”費禕答:“魏延”。他告誡說:“此人心術不正,一旦孔明不在,必然會成為禍患。”費禕回到祁山,先說了孫權已答應出兵的事情,隨後又說了孫權對魏延的看法。孔明說:“我知道此人,但他還有利用的價值。以後的事我自有安排。”孔明送走費禕,魏軍偏將鄭文來降,他自稱與秦朗同領人馬,司馬懿讓秦朗為前將軍,卻不加他的官職,他非常氣憤,所以來投丞相。正說著,小軍報秦朗單挑鄭文出戰。孔明讓鄭文出馬,二人交戰隻一回合,鄭文就一刀劈死了秦朗。待他回營,孔明喝令左右把他綁去斬了。鄭文大叫:“小將無罪!”孔明說:“我認識秦朗,你殺的是秦朗的弟弟秦明。司馬懿派你來詐降,若不實說,立即斬首。”鄭文隻好說出實話。孔明讓他寫下書信,讓司馬懿夜間來劫寨,這樣就可立功贖罪,而且還能得到重用。鄭文寫完書信,孔明下令先把他押起來。孔明挑選一名有口才的軍士,吩咐一番,派往魏營送信。司馬懿看了書信,又仔細盤問了軍士,軍士對答如流。司馬懿就讓他回去告訴鄭文,今天二更劫寨,舉火為號。軍士回去告訴孔明,孔明就仗劍作法,然後吩咐諸將依計行事,他自帶數十人,坐在山上,指揮眾軍。
司馬懿本想帶著兩個兒子親自劫寨,司馬師怕萬一出意外,提議還是派別人當先,司馬懿在後接應。司馬懿就讓秦朗領一萬兵劫寨,他領兵接應。當夜二更時分,突然陰雲密布,對麵不見人。司馬懿高興萬分,命人長驅直入。秦朗衝進蜀寨,不見一人,忙叫退兵,王平、張嶷、馬岱、馬忠領兩路兵殺來。司馬懿見蜀營火光衝天,隻顧催兵接應,忽聽炮聲連天,魏延、薑維從左右殺來。魏兵大敗,四散奔逃,秦朗和他所帶的一萬兵都被消滅,司馬懿逃回了本寨。三更過後,天色放晴,方才陰雲遮天原來是孔明作遁甲之法。孔明回寨,把鄭文斬了。孔明乘車察看地形,見一個山穀,形如葫蘆,問向導:“這是什麼穀?”向導說:“這叫上方穀,又叫葫蘆穀。”孔明回寨,吩咐裨將胡忠如此這般。命令隨軍匠人到穀中製造木牛流馬,派馬岱領兵防守,不準任何人擅入。胡忠就在穀中監督匠人,依法製造。一天,楊儀來報:“糧米都運到劍閣,道路不好,搬運不便,怎麼辦?”孔明說:“我已造下木牛流馬,搬運糧食,非常便利。牛馬又不吃草飲水,可晝夜不停運輸。”過了幾天,造好的牛馬,上山下嶺,非常靈便,眾軍都歡喜異常。孔明就命高翔領一千軍駕著木牛流馬,從劍閣往祁山大寨運糧。司馬懿得知蜀軍用木牛流馬運糧,就派張虎、樂琳各領五百兵,裝扮蜀兵,搶上三五匹就回來。二人於夜間抄小路埋伏好,就見高翔領兵驅趕木牛流馬過來。待快要過完,伏兵殺出,蜀兵扔下幾匹就逃。張虎、樂琳搶回本寨,司馬懿見牛馬進退自如,就像活的一樣,高興萬分,召來能工巧匠,命他們按尺寸仿造。不到半月,就造出兩千多匹,和孔明造的一樣,也會奔走。他讓鎮遠將軍岑威,帶一千軍士驅趕木牛流馬去隴西運糧。高翔報告孔明,魏兵搶走五六匹牛馬。孔明說:“我就是要他搶。他搶去後必然要仿造,那時再看我的計策。”過了不幾天,探子報魏軍仿造出木牛流馬,去隴西運糧了。孔明吩咐王平領一千兵,扮作魏軍,如此行事;派張嶷領五百軍,扮作六丁六甲神兵,如此行事;派薑維、魏延各領一萬兵,去北原接應;派馬忠、馬岱領二千兵去渭南挑戰。岑威領軍驅趕木牛流馬,從隴西運來糧食,見迎麵過來一支巡邏隊,也沒在意。待到兩支隊伍在路上相錯,突聽一聲大喊,蜀兵衝殺過來,魏兵當時被殺了大半,岑威被王平一刀斬了。王平就命部下驅牛馬奔蜀寨。郭淮得報,急忙領兵來救,王平讓士兵把牛馬舌頭一扭,扔下就跑。郭淮帶士兵驅趕牛馬,牛馬一動不動。正無計可施,魏延、薑維各領兵殺來,王平也扭頭殺回,郭淮大敗。王平讓士兵把牛馬舌頭扭回,趕上就走。郭淮看見,想領兵再追,隻見山後煙雲突起,擁出一隊神兵,擁上木牛流馬,如飛而去。司馬懿聽說北原兵敗,忙領兵來救,一聲炮響,張翼、廖化領兵殺出,魏兵四處逃散,司馬懿單槍匹馬,朝林中逃去。廖化緊緊趕來,司馬懿繞樹而跑。廖化一刀砍在樹上,拔出刀來,見司馬懿的金盔在東麵,就拾起金盔望東追去。誰知司馬懿早已向西逃遠了。王平早已回寨,繳獲糧食萬餘石。司馬懿回寨,心中正煩悶,聖旨來到,說是東吳入侵,朝廷正在商議退敵,讓他深溝高壘,堅守不戰。