明末的陕北是迸发埋葬朱明王朝熔流的火山口。这里地瘠民贫,赋役苛重,加上官吏贪暴,连年饥荒,民不聊生;而这里又是边防重镇,众多的边兵因不堪虐待,往往哗变,成为造反的组织者和领导者。1627年(天启七年)4月1日,陕西澄城县知县张斗耀,不顾赤地千里,“人相食”的惨状,仍然坐堂逼粮。怒火填膺的饥民忍无可忍,各持利器,拥进公堂,乱刀砍死张斗耀,埋葬朱明王朝的熔流迸发出来。随后,各地的饥民饥军纷纷汇入熔流。
1628年(崇桢七年),府谷王嘉胤、宜川王左桂、安塞高迎祥先后举起义旗,饥民与哗变的士兵纷聚到他们的旗下。1629年,清兵入长城抢掠,明廷调陕西边兵入卫。入卫兵行至金县(甘肃榆中),因索饷未得而哗变,把总李自成率众往投王左桂。李自成(1606—1645年),原名鸿基,陕西米脂县李继迁寨人。家本富裕,但自成出生时已中落。自成习文习武皆不成,曾为乡中艾姓地主牧羊。21岁时,应募为银川驿卒,犯法走甘肃,投巡抚梅之焕部下当兵。因勇敢善战,积功为把总(领兵50人)。在李自成投奔农民起义军的同年,明政府裁减西北驿卒三分之二,失业的驿卒加入起义队伍,声势顿时壮大。1630年,陕西延安柳树润(陕西定边东)人张献忠在米脂率十八寨之众响应王嘉胤,自号“八大王”。张献忠,字秉吾,号敬轩。父亲是一农民兼小贩。他幼年入塾读书,后因肇祸离家出走,曾投明军当兵。
当时各支义军处于自发阶段,各自为战,互不联系,易为明朝各个击破,所以义军开始时遭到了一连串失败。
1631年以后,义军趋向联合,众推王自用为首领,号紫金粱,会合高迎祥、张献忠等36营于山西,然后转战晋、豫、冀、鄂、陕、川。1633年,王自用战死,众拥高迎祥为闯王,而李自成为闯将,义军众至数十万。
1631年,明政府派延绥巡抚洪承畴总督三边军务,镇压义军。1634年,又以延绥巡抚陈奇瑜总督五省军务,重创农民军。此年夏天,围李自成于汉中车箱峡。李自成以假就抚突围。明廷罢免陈奇瑜,令洪承畴调集重兵扑向农民军。1635年正月,农民军联营72,自河南东进,十数月内,攻下中都凤阳,焚明皇陵,明廷大震。这时,农民军内部分裂,张献忠、高迎祥各领一支,转战于河南、陕西、南直隶江北之间。李自成则在陕西坚持战斗。1636年夏,高迎祥在陕西周至遭陕西巡抚孙传庭伏击,身亡,李自成继为闯王。从此,农民军形成以李自成、张献忠为首的两大势力。
1636—1638年是农民起义的低潮期。1637年,张献忠在桐城推东河战役中失利,退守湖北房山、竹山一带,暂受巡抚熊文灿招抚,进行休整。1638年,明政府以兵部尚书杨嗣昌为督师,倾明朝主要军事力量,部署“四正”、“六隅”,构成对农民军围追堵截的“十面网”。李自成于川北、陕南接连失利,在潼关又遭洪承畴伏击,遂退居商洛山中。
1639年,张献忠在谷城再起,与罗汝才合兵,转战于鄂、豫、川、陕毗邻地带。李自成闻张献忠再起,前去投奔,未被接纳,又退避巴西鱼废山中。
1640年,张献忠突围入川,采取“以走致敌”的战术,转战全蜀,攻取大部分州县,粉碎了杨嗣昌“四正六隅”、“十面网”的围剿。
同年,李自成利用河南大饥的时机,东出河南,大集饥民,很快领众数十万,势复大振。有些士人,如牛金星也加入了起义军的队伍。李自成军提出了“均田免粮”的口号。1641年,李自成攻克洛阳,杀福王朱常洵,两次围攻开封。1642年,项城、襄城、朱仙镇、郏城、汝宁等五次战役中,李自成连败明军主力,略定河南,“所过无坚城,所遇无劲敌”,明军“诸将皆望风走”。
张献忠则于1641年3月克襄阳,杀襄王朱翊铭和贵阳王朱常法,杨嗣昌畏惧承担失藩罪,于军中自戕。
1643年,李自成攻下承天(今湖北钾祥),控制了河南与湖广北部,于是改襄阳为襄京,称新顺王,建立政权。定计推翻明王朝:先取关中,建立基业。然后旁略三边(指陕西三边镇,即甘肃、延绥、宁夏),资其兵力,攻取山西,再向京师。“庶几进战退守,万全无失”。李自成即率军北伐,大败孙传庭于南阳、汝州一带。11月,攻破潼关,击毙孙传庭,明军主力全部覆没。李自成进据西安,发兵略定三边。
1644年2月8日(崇祯十七年正月初一),李自成以西安为西京,建国号为大顺,改元永昌。进一步完善政权组织,铸造货币,开科取士,宣传义军政策。15日,李自成率军渡河东征,下太原。然后分兵两路:偏师东出固关,趋大名、真定;李自成亲率主力,克忻、代,破宁武,进抵宣府。4月上旬入居庸关,占昌平。4月22日,义军包围北京,24日夜,攻破外城。25日凌晨,崇祯帝朱由检与太监王承恩在煤山东麓上吊自杀。朱明王朝到此灭亡。农民军进城后发现,吊死的皇帝衣袖上写着两行字,一行云:“因失江山,无面目见祖宗,不敢终于正寝。”一行云:“百官俱赴东宫行在。”不过明太子和两个亲王都被李自成抓住了,无法再做大明江山的继承人了。