前因:公元211年,建安十六年,曹操西征剿灭马超韩遂联军,恢复了自赤壁大败以来的声势,汉中蜀中震恐,请刘备入川,刘备借此机会夺取益州。4年后,215年,建安二十年,曹操再次西征汉中,张鲁投降,马超入川被刘备收编。至此曹操领土与刘备领土接壤,大战一触即发。之前孙权对于刘备入川不归还荆州十分恼怒,集结兵力准备以武力解决荆州问题,刘备听闻汉中失守曹操要南下入川,立马与孙权议和,中分荆州,回师救援,张飞在巴西大败张郃。但曹操因为后方叛乱并没有进攻,而是派遣夏侯渊、张郃、郭淮等将领镇守,退兵回师。
公元217年,建安二十二年,刘备经过了2年准备,集中了益州精锐对汉中发动战略进攻,是为“汉中之战”。刘备方面,刘备为统帅,法正为军师,张飞、赵云、黄忠、马超等为大将。曹操方面,夏侯渊为统帅,张郃、郭淮等为部将。
公元218年,建安二十三年,刘备出师不利,各路进攻都被击退,雷铜、吴兰战死,曹操从许都集结地 援军抵达长安。
第二年219年,建安二十四年,刘备放弃占领的阳平关,退军定军山,夏侯渊张郃发兵进攻,是为著名的“定军山战役”。刘备反攻张郃部,张郃勇猛当先浴血死守,夏侯渊火速驰援,刘备反应迅速让黄忠部狙击,黄忠从山上往下冲杀,气势恢宏,与夏侯渊军直接肉搏交战,阵斩夏侯渊,曹军全军溃退。夏侯渊阵亡对于曹军来说影响十分巨大,统帅阵亡后,全军士气低落,惶恐不安,张郃被推举为临时统帅稳定局势。好在,曹操援军总算抵达。
219年三月,曹操进入阳平关,屯粮北山,刘备为了最终决战令成都诸葛亮也增兵增粮汉中,但益州刚定,国内疲乏,诸葛亮犹豫之际,杨洪以汉中是益州咽喉,家门之祸、存亡之机,劝谏诸葛亮在这种时候应该“男子当战,女子当运”。此时赵云黄忠密谋奇袭曹军屯粮地,认为必有重兵把守,两人约定由黄忠发动奇袭,赵云待命,若黄忠久久不能返回,则赵云率军救援。结果果然黄忠遭到围困,赵云率几十轻骑救援,冲散曹军,救出黄忠,返回大营。曹操亲自率军来攻,赵云使用空城计,大开城门,偃旗息鼓,曹操以为有埋伏遍撤军,赵云此时趁曹军军心不稳发动全军突袭,曹军阵型大乱全军溃逃,死伤无数。至此曹操军接连遭遇损失,士兵士气低落,已经无力再战,曹操随放弃汉中,牵走汉中百姓,回师许昌。
从中可以看到,汉中之战的胜负主要是由2场战役决定,定军山夏侯渊阵亡和曹操本部士兵被赵云击溃。其中黄忠是最大功臣。而刘备攻伐汉中均势法正的建议,跟诸葛亮无关。诸葛亮更多的是负责镇守大后方,督促运粮的工作。