唐朝统一全国的更重要一步,是镇压河北农民军,攻取洛阳。隋炀帝时,洛阳逐步成了全国的政治中心。大业十二年(616)七月,隋炀帝最后一次离开洛阳到了江都。由于农民起义军遍地而起,他无法再回到洛阳。从此以后,洛阳就成为隋军残余势力的据点。
大业十三年初,瓦岗军逼近洛阳,越王侗向隋炀帝告急,隋炀帝遂派江都郡丞王世充率部增援洛阳。王世充到了洛阳,虽然多次进攻瓦岗军,但始终没有改变洛阳隋军被围的困境。隋炀帝被杀后,越王侗也在洛阳做了皇帝,旦实际大权都掌握在王世充手中。
武德元年(618)九月,瓦岗军打败宇文化及后,自己也损失严重,“其劲卒良马多死,士卒疲病”。王世充乘机打败瓦岗军,加强了自己在洛阳隋军中的地位。武德二年四月,他强迫越王侗让位,自己做了皇帝,建国号为郑,成为洛阳名副其实的最高统治者了。
武德三年六月,唐军平定了刘武周,七月,李世民就奉命东进洛阳。王世充率军三万人与唐军在慈涧(在河南洛阳西)交战。经过激战,王世充败退城内。李世民命行军总管史万宝由宜阳进据龙门(在今河南洛阳南),命将军刘德威围攻河内(郡治在今河南沁阳),命怀州总管黄君汉进攻回洛城今河南洛阳东北),命王君廓至洛口(今河南巩县),断绝王世充的粮道主力军屯驻于洛阳北的邙山,对洛阳形成了包围的形势。
唐军与王世充相持于洛阳时,河北的窦建德起义军是一支非常强大的力量。唐和王世充都曾派人去争取窦建德。窦建德一面表示愿和唐军联合,同时请求唐罢围洛阳之兵;一面又向王世充表示愿意派兵相助。
当时,唐高祖要统一全国是不可动摇的方针。所以,唐军首先严辞拒绝王世充¨息兵讲好”的请求,接着,又拒绝窦建德¨退军潼关,返郑侵地,复修前好”的建议,同时又威胁窦建德说:增援王世充¨良非上策”,望择善而从,否则,“恐虽悔难追”。这样软硬兼施,阻止他增援王世充。
武德四年三月,窦建德率军十余万,号称三十万,增援王世充。窦建德进军至成皋(即虎牢,在今河南荥阳西汜水)的东原,通知王世充,希望能够东西夹击唐军。
面临腹背受敌的威胁,李世民与将佐认真硏究了形势。李世民认为:“世充兵摧粮尽,上下离心,不烦力攻,可以坐克。建德新破海公,将骄卒情,吾据武(虎)牢,扼其咽喉。彼若冒险争锋。吾取之甚易。”窦建德若入虎牢关,与王世充很快合兵一处,就难对付了。于是,他使屈突通等辅佐李元吉围困洛阳,自己亲率精锐部队东赴虎牢关。
几次交锋,唐军都取得了胜利五月初二这一天,窦建德全力以赴,发动进攻。北距黄河,西薄汜水,南属鹊山,南北二十里(即今河南荥阳西旧汜水县至黄河沿汜水一带),鼓行西进。唐军以逸待劳,坚守不出,自早至午,农民军饥倦疲惫,正争饮水时,唐军突然岀击。窦建德措手不及,战败受伤,退至牛口渚(今河南荥阳西旧汜水东北),被唐军所俘。窦建德失败,王世充所属的偃师(今河南偃师)、巩县(今河南巩县)等地官吏相继投降唐军,王世充看到大势已去也只得举城投降。
从此以后,中原、河北一带,基本上为唐所统一了。武德四年九月,唐高祖命河间王李孝恭等人率唐军自夔州(治所在今四川奉节)沿江东下,进攻割据于江陵(今湖北荆沙)的萧铣。萧铣是后梁宣帝的曾孙,隋炀帝时为罗县(今湖南湘阴东北)令。
大业十三年,他乘农民起乂之机,割据一方,自称梁王,次年,又称皇帝,以江陵为中心,逐步发展力量,以至“东自九江,西抵三峡,南尽交趾,北距汉川,铣皆有之,胜兵四十余万萧铣听到唐兵压境的消息,大为恐慌,仓猝迎战。唐将李靖把所得舰只弃而不用、尽散江中,顺水而下,萧铣所调援军见了散之江中的舟楫,以为江陵已破,不敢前进。于是,唐军集中力量围攻江陵。萧铣看到大势已去,遂下令开门出降。至此,长江中游与岭南一带也全为唐所统一了。
武德七年(624),唐军镇压了辅公祏起义,统一了长江下游。这时,除了仍然割据于朔方(郡治在今陕西靖边北白城子)的梁师都(贞观二年被统)以外,全国又复统一起来了。