陕北起义震惊了明朝统治者,崇祯皇帝准备利用剿抚兼施的策略尽快平息农民起义,三边总督杨鹤执行以抚为主,以剿为辅的政策,企图瓦解农民革命。在明军剿抚兼施进攻下,陕西战场义军除壮烈牺牲外,不少首领接受了明廷招安,呈现出时降时叛的复杂局面。为避开明军主力,王嘉胤翠军人晋,起义中心转移到山西。王嘉胤牺牲后,王自用联合高迎祥、张献忠、罗汝才各部,号称36营,在山西继续战斗,农民起义军由分散状态进入协同作战阶段。义军势力壮大,宣告了明朝招抚政策破产,主抚派杨鹤下台,洪承畴继任三边总督,集中力量围剿起义军。王自用在崇祯六年(1633年)作战牺牲,起义军在高迎祥领导下与明军展开了激烈搏斗,损失较大。为保存实力,起义军从山西转入河南,崇祯六年(1633年)冬,高迎祥、张献忠、罗汝才、李自成等经渑池县突破黄河防线,转移到明军力量薄弱的豫西,展开了新的战斗。渑池突围的胜利,不但使义军未被消灭,而且变被动为主动,对后来起义军势力壮大意义重大。
起义军渑池突围后,在豫楚川陕交界山区流动作战,与明军周旋,明军不得不分兵把守要隘,穷于追剿,陷入战线过长,兵力分散的困境。明将洪承畴为改变被动局面,以重兵包围起义中心地区,实施重点进攻,高迎样义军接连败于确山、朱仙镇(今河南开封西南)等地,连连受挫,被迫转入西部山区。崇祯九年(1636年)夏,起义军被圈困在丛山之中长达3个月。高迎祥率部从陕西汉中突围,遭到陕西巡抚孙传庭埋伏,被俘牺牲。
高迎祥牺牲后,起义军逐渐形成为两支劲旅,一支由张献忠领导,活动在湖北、安徽、河南一带;另一支由李自成领导,活动在甘肃、宁夏、陕西一带。崇祯十一年(1638年),在洪承畴优势兵力围攻下,起义军蒙受了很大损失。李自成兵败梓潼,退守岷州(今甘肃岷县)、临洮。张献忠败于南阳、麻城,最后投降了明军,起义转入低潮。为保存起义军力量,李自成率部进入河南,于崇祯十四年(1641年)一月攻占洛阳,镇压了福王朱常洵。张献忠经过一年休整,于崇祯十二年(1639年)五月再次起兵,在罗孚山(今湖北竹山东南)歼灭明军主力左良玉部,后转入四川,在达州战役中大获全胜,随即兵进湖北,于崇祯十四年(1641年)二月攻陷襄阳,镇压了襄王。李自成、张献忠相继攻占洛阳、襄阳,宣告了明朝围剿政策的破产。
张献忠、李自成两支大军相互应援,分别在川陕和河南战场与明军作战。张献忠于崇祯十六年(1643年)五月攻下武昌,把楚王投入江中。张献忠在武昌称大西王,初步建立了政权。次年,张献忠带兵入川,八月攻陷成都,在成都称帝,改元大顺,建立大西政权。李自成从洛阳转入湖广作战,于崇祯十五年(1642年)攻下襄阳,称新顺王,初步建立了政权机构。此后连克承天府(今湖北钟祥)、孝感、黄州(今湖北黄冈)等地,基本上摧毁了明朝在河南的精兵,“据河洛取天下”。李自成攻占襄阳后,在政治上提出“均田免粮”口号争取群众,军事上改变过去流动作战战术,派遣将领分守所克城邑,严密军事组织,建立各种军事制度,把军队分为骑兵和步兵两种,形成营队两组编制,战术上步骑配合,骑兵诱敌,步兵拒战,然后骑兵包抄合围。攻城时骑兵布围,步兵冲锋,昼夜三番轮攻。这表明起义军已由流动作战阶段进入阵地战阶段,已具备了推翻明朝的实力。李自成确定了先取关中,继取山西,后占北京的策略。
崇祯十六年(1643年)十月,李白成大军攻克泣关,率10万大军围歼明三边总督孙传庭,十一月起义军不战而进入西安。崇祯十七年(1644年)一月,李自成建立大顺政权,势力进一步壮大,把西安作为攻打北京的基地。然后,李自成亲率大军渡黄河进入山西,攻克太原,沿大同、宣府(今河北宣化),从北面包围了北京。另一路义军由左营制将军刘芳亮率领,渡黄河攻克山西上党(今山西长治),分取真定(今河北正定)、保定,从南面包围北京。三月十七日,李自成从昌平围攻北京,北京明军不攻自溃,十九日李自成率兵进城,崇祯帝在煤山自杀,明朝被推翻。
李自成进京后,面临的形势是如何消灭明朝残余势力,其中力量最强的是盘踞在山海关的宁远总兵吴三桂,成为起义军的心腹之患。出于对农民起义军仇恨的地主阶级本性,吴三桂投降了清朝,与清军联合镇压起义军。四月,李自成亲事大军攻打吴三桂,在山海关激战。在满汉军队联合进攻下,李自成失败,撤回北京。二十九日匆忙称帝,建国大顾,次日退出北京。
李自成撤出北京后,有计划地实施战略退却,经山西平阳、韩城进入西安。清军在清顺治元年(1644年)冬分兵两路进攻西安,次年二月潼关失守,李自成从西安经襄阳进入武昌,五月,李自成在湖北通山县南九宫山遭到地主武装袭击,壮烈牺牲。顺治三年(1646年),清军由陕南入川,攻打大西军,张献忠于次年七月撤离成都,北上与清军作战,十一月牺牲在凤凰山(今四川南溪