隋代末年,隋王朝的统治日趋腐朽残暴,它横征暴敛,荒淫无道,刑罚酷烈,兵役苛繁,结果民不聊生,矛盾激化,最终导致爆发了轰轰烈烈的农民大起义。到公元617年初,农民起义形成了三大起义军中心,李密瓦岗军转战于河南地区,窦建德起义军活跃于河北一带,杜伏威起义军崛起于江淮地区。他们前仆后继、英勇斗争,歼灭了大批隋军,使隋王朝统治濒临于彻底崩溃的边缘。在农民起义风起云涌的形势下,一些贵族和地方官吏也抱着各种政治目的,纷纷起兵反隋,李渊父子的太原起兵就是其中之一。
不久,李世民得到情报,说窦军企图乘唐军饲料用尽,到河北岸牧马的机会,袭击虎牢。李世民将计就计,遂率兵一部过河,南临广武,在观察了窦军情况后,故意留马千余匹在河渚,以诱窦建德军出战。次日,窦军果然中计,出动全军,在汜水东岸布阵。北依大河,南连鹊山,正面宽达十多公里,摆出一副进攻的架势。李世民正确地分析了形势,指出窦军没有经历过大战,今度险而进,逼城而阵,有轻视唐军之意。我军可按兵不动,等待窦军疲惫之后,再行出击,以一举克敌制胜。于是他一面严阵以待,使窦军无隙可乘;一面派人召回留在河(黄河)北的诱兵,准备出击。
窦建德轻视唐军,仅遣300骑过汜水向唐军挑战,李世民派部将王君廓率长矛兵200出战。两军往来冲击交锋数次,未分胜负,各自退回本阵。战斗呈现胶着状态。
窦建德沿汜水列阵,自辰时直至午时,士卒饥饿疲乏,支撑不住,都一屁股坐倒在地上,士卒间又争着喝水,秩序一片混乱,表现出要返回军营的意向。李世民细心观察到这些迹象后,即派遣宇文士及率领300精骑经窦军阵西而来,先行试阵。并且指示说:如窦军严整不动,即回军返阵:如其阵势有动,则可引兵继续东进。宇文士及至窦军阵前,窦军的阵势即开始动摇。李世民见状,当机立断,下令出战,并亲率骑兵先出,主力继进。过汜水后,直扑窦建德的统帅部。
当时窦建德正欲召集群臣议事,唐军骤然而至,群臣均惊恐失措,纷纷向窦建德处走避,致使奉调抵抗唐兵的战骑通道被阻塞。窦建德急忙下令群臣闪开为骑兵让路,但是为时已晚,唐军已经冲入。窦建德被迫向东撤退,为唐军窦抗部所紧追不舍。接着李世民所率精骑也突入窦军大营,双方展开激战。李世民又命秦叔宝、程知节、宇文歆等部迂回窦军的后路,分割窦军。窦军见大势已去,遂惊慌溃逃。唐军乘胜追击15公里,俘获窦军五万余人。窦建德本人也负伤坠马被俘,其余军卒大部溃散,仅窦建德之妻率数百骑仓皇逃回河北。至此,窦军被全部歼灭。
唐军取得虎牢之战的胜利后,主力回师洛阳城下。王世充见窦军被歼,内外交困,走投无路,遂于绝望之中献城投降。
虎牢之战,唐军消灭窦建德主力部队10万人,接着又迫降了洛阳王世充的残余守军,夺取了中原的主要地区,取得“一举两克”的重大胜利,创造了我国古代“围城打援”的着名成功战例。这也是李唐统一全国的最关键一战。至此,唐王朝的统一事业基本完成。