隋朝末年,隋炀帝杨广滥用民力,大兴土木,穷兵黩武,用暴力迫使农民与土地分离,严重摧毁了生产力,社会生产被破坏,阶级矛盾迅速激化。大业五年(609),长白山(今山东章丘东北)有“狂寇”数万。六年,北方的雁门(今山西代县)和东都洛阳,先后发生暴动。虽不久都被镇压,但却是全国性农民起义的先兆。黄河南北一带,在营建东都、修缮长城、开凿运河的过程中,遭受的祸害最为严重。大业七年(611),炀帝下令进攻高丽,在全国征兵百余万人向涿郡(今北京)集中,又强征上百万的民夫转运粮械。车牛往者不返,士卒死亡过半,耕稼失时,田畴多荒,给人民带来巨大灾祸,这一带农民纷纷起义反抗。
同年,邹平(今山东邹平北)民王薄聚集农民据长白山起义,自称“知世郎”,作《毋向辽东浪死歌》反对辽东之役,以发动民众。逃避征役的广大农民纷纷参加到王薄起义军中。随后,平原(今山东陵县)刘霸道、县(今山东夏津)张金称、漳南(今河北故城东)孙安祖和窦建德、渤海(今河北阳信西南)高士达、韦城(今河南滑县东南)翟让、章丘(今山东章丘西北)杜伏威等相继起兵。其余反隋小股武装不可胜数。这一年起义军主要起于今山东、河北、河南间,聚保山林川泽,主力则是逃避征役的贫苦农民。
炀帝无视人民的愤怒与反抗,大业八年(612)悍然发兵攻打高丽,促使起义进一步发展。这一年,见诸史籍记载的新的起义军有二十一支,其中,山东十四支,江淮四支,河南、关中和河西各一支。起义的地区扩大,重点仍在河北、山东。起义的群众基础也扩大了,大多数是贫苦农民,也有牧子(身份不自由的牧民)和下层僧侣。
在起义队伍迅速扩大的同时,隋统治集团内部发生分裂。大业九年(613),炀帝发动第二次对高丽战争。大贵族杨素之子礼部尚书杨玄感,乘炀帝在辽东之机,联合一批贵族子弟起兵黎阳(今河南浚县北),进逼东都。炀帝与玄感之间的厮杀,抵消了统治阶级的实力,义军乘机发展。到大业十年(614)第三次对高丽战争时,义军处处皆是,道路隔绝,官军已经无法按期集中。
大业十一年(615)以后,隋统治阶级开始把大部分军队用于镇压农民起义军。炀帝还命令在郡县城郭、驿站、村庄的周围修筑城堡,强迫农民到城堡里居住,以隔断义军与民众的联系。统治者对起义军和一般农民进行了疯狂的大屠杀。隋将樊子盖镇压起义军时,将汾水以北村庄全部烧光,俘虏的起义军全部被屠杀。王世充打败江南刘元进起义军时,把诱降来的三万人也全部屠杀。
统治者的残酷镇压迫使更多的农民起来反抗,到大业十二年(616),先后在全国各地兴起的起义军大小不下百余支,义众达数百万。起义军攻陷许多郡县,消灭大量隋兵。隋炀帝调杨义臣率辽东还兵镇压河北起义军,自率禁军到江都,镇压南下江淮的起义军。在和隋军主力作战的过程中,起义军败而复聚,由分散走向集中,逐步形成了瓦岗军、河北夏军和江淮吴军三支主力。
瓦岗军的创始人是翟让。大业十二年(616),曾参预杨玄感反隋的贵族李密也来参加瓦岗军。他说服附近小股起义军聚集到瓦岗军周围。瓦岗军攻破要塞金堤关,打下荥阳(今河南郑州)诸县。炀帝以张须陀为荥阳通守,率兵两万前来镇压。李密说服翟让还击。翟让率兵列阵以待,李密统骁勇常何等游骑千人埋隋末农民起义早期示意图伏于荥阳大海寺北,大败隋军,阵斩张须陀。这是起义军在河南境内的第一次大胜仗,为起义军在中原地区的胜利发展奠定了基础。大业十三年(617)二月,瓦岗军攻破兴洛(后改洛口)仓,开仓赈济饥民。留守东都的越王侗急派刘长恭和裴仁基分兵两路,准备在兴洛仓合击瓦岗军。瓦岗军先击溃了刘长恭所率的两万五千步骑,不久又招降了裴仁基。翟让推李密为瓦岗军首领,号魏公。赵魏以南(今河北中部及南部)、江淮以北的各路起义军皆归瓦岗军,众至数十万,几乎控制了河南全境。瓦岗军成为河北、山东各路起义军的盟主。四月,瓦岗军围迫东都,将20余万隋军困于孤城。
在河北地区,大业十二年(616),张金称、高士达先后被隋军镇压,窦建德收合两部余众,军势复振,很快发展到十余万人。隋在河北地方上的武装力量基本上已被消灭,起义军兵锋所至,隋朝官吏“稍以城降之”。次年正月,窦建德在乐寿县(今河北献县)郊建立政权,自称长乐王,署置百官,改元丁丑。
在江淮一带,大业十二年(616)七月,炀帝至江都(今江苏扬州)时,李子通据海陵(今江苏泰州),左才相在淮北,杜伏威屯六合,从三面威胁江都。炀帝遣陈棱率宿卫精兵八千进行讨伐,互有胜负。次年正月,又遣陈棱征讨江淮一带起义军中力量最强大的杜伏威。隋军大败,起义军乘胜攻破高邮(今江苏高邮北),占历阳(今安徽和县),杜伏威自称总管,以辅公柘为长史,很快控制了淮南各县,江淮间小股反隋武装多来归附,形成了江淮间巨大的起义力量。
从大业十三(617)年三四月瓦岗军围逼东都开始,以瓦岗军为中坚,以窦建德、杜伏威为两翼的农民起义军,对隋王朝进行了摧毁性的打击。六月,瓦岗军大败隋军,东都危急。七月,炀帝抽调“江淮劲卒”和“燕地精兵”奔赴东都,涿郡留守薛世雄统率燕地精兵三万南下攻瓦岗军,兵至河间(今属河北),营于七里井,准备会合河间诸县兵先行镇压窦建德起义军。窦建德指挥部队从各城中撤出,向南转移,然后乘薛世雄不加防备,选精兵数千人为伏兵,亲率敢死之士280人夜袭。三万隋军溃散,薛世雄带数十骑逃回涿郡。窦建德起义军又重新控制了河北的大部分地区。
八月,瓦岗军占领黎阳仓,开仓赈济饥民,扩大起义队伍数十万人。炀帝又命江都通守王世充统率洛阳附近诸郡兵与东都留守兵共十余万人,在洛水两岸同瓦岗军展开激战。王世充屡战屡败,有些隋将投降李密。这时洛阳城内缺粮,饿死的人很多。河北、山东、河南和江淮流域都被起义军占领,隋的军事力量也大部被起义军消灭,隋王朝直接控制的地方越来越狭小。形势对瓦岗军非常有利。但由于瓦岗军内部矛盾日益加深,李密始终不肯改变在洛阳城下与隋军主力长期鏖战的错误战略,所以没有取得决定性胜利。
在农民起义军从各条战线向隋王朝发起全面进攻的同时,朔方(今内蒙古白城子)梁师都、马邑(今山西朔县)刘武周、金城(今甘肃兰州)薛举等地主官僚也纷纷起兵,割据地方。大业十三年(617)五月,隋太原留守李渊也从太原起兵。七月,趁隋军与瓦岗军大战之机,进入关中。十一月,攻克长安。
大业十四年(618)三月,在江都的隋禁军将领利用关中士兵思归的情绪,推宇文化及为主,发动兵变,杀死隋炀帝,领兵西归。五月,李渊在长安即皇帝位,建立唐朝。留守东都的隋越王侗也在洛阳即皇帝位,改元皇泰,史称皇泰主。
炀帝死后,阶级关系发生很大变化。杜伏威上表于洛阳小朝廷,皇泰主拜伏威为东道大总管,封楚王。李密也在宇文化及大军压境的情况下,为了避免腹背受敌,向皇泰主称臣。李密大破宇文化及的军队,但自己的兵力损失也很大,于九月被实际控制东都的王世充乘虚打败,投降李渊。只有窦建德的夏政权在河北仍保持独立。武德四年(622)三月,唐兵进攻洛阳王世充,窦建德亲自统兵十余万援助王世充,和唐军相持于虎牢(今河南荥阳西北)一带。谋士凌敬建议全军渡河,攻占河阳,越过太行山,进军汾水流域,威胁关中,迫唐军从洛阳撤退。建德不听。五月初,李世民袭击得手,夏军溃散,建德被俘。之后,建德留守州诸将士或散尽,或降唐。七月,窦建德于长安被杀。夏亡。
窦建德被唐军镇压后,余部在刘黑闼领导下,复于武德四年(622)、五年(623)两次起义于河北,六年(624)被消灭。杜伏威于武德二年降唐,五年(623)入朝长安,以辅公留守。唐以杜伏威为太子太保,仍兼行台尚书令,留长安。六年(624),这支义军又在辅公领导下起义反唐,次年三月被消灭。