李淵在太原起兵之後,便以進軍關中拿下長安為最終目標。西進的第一個障礙便是西河郡(今山西汾陽縣)。李建成和李世民兄弟倆僅用了九天便得勝而歸,使得李淵喜出望外。

然後,李淵建立了自己的基本的軍事和政權機構:設置大將軍府,自稱大將軍,長子李建成為隴西公、左領軍大都督,統領左三軍;李世民為敦煌公、右領軍大都督,統領右三軍;裴寂和劉文靜為長史司馬。

第二戰是決戰霍邑(今山西霍縣)。在霍邑的西北有個賈胡堡,是霍邑的門戶,但守衛霍邑的宋老生卻沒有派兵把守,李淵由此斷定宋老生是個無能之輩。

李淵害怕宋老生守城不出,打成持久戰對自己不利。李世民卻認為可以挑戰引他出來決戰。於是李淵讓兩個兒子領幾十名騎兵進城觀察,自己將部隊分成十幾隊,從城東南到西南,擺出一副安營攻城的架勢。宋老生果然中計,以為李淵要攻城,便領兵三萬出戰。李淵領兵假裝後退,讓李建成和李世民領兵搶占了東門和南門,切斷了宋老生的退路。在交戰中李淵又散布宋老生已經戰死的謠言,動搖了隋軍的軍心。隋軍大敗,全軍覆滅。宋老生也在被守軍用繩子往城牆上提時,被李淵的軍頭盧軍諤跳起殺死。李淵順利占領了霍邑。

此後,李淵又攻打河東,沒有攻下。李淵聽從了李世民直接入關中的建議,分兵攻長安。等圍攻長安成功建立唐朝之後,又繼續圍困,到620年(唐高祖武德三年)農曆正月才最終占領河東。

在招降長安失敗後,李淵下令攻城,占領之後又下令禁止擄掠百姓,受到百姓們夾道歡迎。在617年(隋大業十三年)的農曆十一月,李淵擁立隋代王楊侑為帝,即隋恭帝,改元義寧,尊在江都(今江蘇揚州)的隋煬帝為太上皇,李淵為大丞相,封唐王,以武德殿為丞相府(所以後來李淵便以“武德”為自己在位時的年號),李世民為秦王。這實際是在為以後稱帝搞一個過渡。

到618年(大業十四年)農曆五月,隋煬帝的右屯衛將軍宇文化及在江都兵變,勒死了隋煬帝,然後立秦王楊浩為帝,自己做大丞相,隨後領兵十萬北上,但被李密打敗。宇文化及敗走魏縣(今河北大名東),毒死楊浩,自己稱帝,建立鄭國。第二年,過了皇帝癮的宇文化及在聊城被竇建德殺死。

隋煬帝一死,李淵便甩開了隋恭帝,在618年(武德元年)逼楊侑禪位,稱帝建立唐朝,改年號為武德,定都長安。