617年(大业十三年)农历七月,李渊率军三万誓师,正式起兵。在布的檄文里斥责隋炀帝听信谗言,杀害忠良,穷兵黩武,致使民怨沸腾,“豺狼充于道路”,因此,李渊要废掉昏君隋炀帝,尊为太上皇,然后拥立代王杨侑为帝。其实,这仅仅是李渊的一种号召天下的策略。
这时,李渊刚从太原起兵,瓦岗军领李密便写信给李渊,想和他结盟共图大计,实际上是想让李渊尊他为盟主。李渊收到信后,非常高兴,他当时正需要有人为他阻挡中原还没有被消灭的隋朝军队,使他免去后顾之忧,集中兵力拿下长安。于是李渊给李密回信,对李密极力吹捧,说自己没有取代隋朝之意,这就是李渊自己所说的“卑辞推奖以骄其志”的计策,先麻痹李密,让他阻挡中原的隋军西进。
李密受到李渊的回信也是非常高兴,于是专心于对付东面的隋军。一东一西,两个李姓人开始了较量,但李密最后还是稍逊一筹,败在李渊手下,还丢了性命。
在618年,瓦岗军和洛阳的隋军作战失利,李密想东山再起,却遭到了部将们的反对,他只好到长安投靠李渊。李渊热烈欢迎他,当成贵宾对待,常称李密为弟,还将表妹嫁给他。但后来李密又嫌弃官小,对李渊说想回山东收服部下,帮李渊拿下洛阳。
李渊表面上答应了他的要求,暗地里却派长史张宝德监视,等李密离开长安要出关时李渊却下令让他留一半兵在华州(今陕西华县)。这时,和李密同行的张宝德向李渊告密说李密要叛乱,实际是张宝德怕李密跑掉自己担不起责任。李渊便命李密一人入朝。李密感到大祸临头,便起兵想闯出关去,结果被围歼。在和李密的斗争中,李渊充分利用了李密骄傲自大的缺陷,在开始吹捧李密,等长安拿下后,李密投靠他时又设计除掉了这个隐患。
李渊在太原起兵之后,便以进军关中拿下长安为最终目标。西进的第一个障碍便是西河郡(今山西汾阳县)。李建成和李世民兄弟俩仅用了九天便得胜而归,使得李渊喜出望外。
然后,李渊建立了自己的基本的军事和政权机构:设置大将军府,自称大将军,长子李建成为陇西公、左领军大都督,统领左三军;李世民为敦煌公、右领军大都督,统领右三军;裴寂和刘文静为长史司马。
第二战是决战霍邑(今山西霍县)。在霍邑的西北有个贾胡堡,是霍邑的门户,但守卫霍邑的宋老生却没有派兵把守,李渊由此断定宋老生是个无能之辈。
李渊害怕宋老生守城不出,打成持久战对自己不利。李世民却认为可以挑战引他出来决战。于是李渊让两个儿子领几十名骑兵进城观察,自己将部队分成十几队,从城东南到西南,摆出一副安营攻城的架势。宋老生果然中计,以为李渊要攻城,便领兵三万出战。李渊领兵假装后退,让李建成和李世民领兵抢占了东门和南门,切断了宋老生的退路。在交战中李渊又散布宋老生已经战死的谣言,动摇了隋军的军心。隋军大败,全军覆灭。宋老生也在被守军用绳子往城墙上提时,被李渊的军头卢军谔跳起杀死。李渊顺利占领了霍邑。
此后,李渊又攻打河东,没有攻下。李渊听从了李世民直接入关中的建议,分兵攻长安。等围攻长安成功建立唐朝之后,又继续围困,到620年(唐高祖武德三年)农历正月才最终占领河东。
在招降长安失败后,李渊下令攻城,占领之后又下令禁止掳掠百姓,受到百姓们夹道欢迎。在617年(隋大业十三年)的农历十一月,李渊拥立隋代王杨侑为帝,即隋恭帝,改元义宁,尊在江都(今江苏扬州)的隋炀帝为太上皇,李渊为大丞相,封唐王,以武德殿为丞相府(所以后来李渊便以“武德”为自己在位时的年号),李世民为秦王。这实际是在为以后称帝搞一个过渡。
到618年(大业十四年)农历五月,隋炀帝的右屯卫将军宇文化及在江都兵变,勒死了隋炀帝,然后立秦王杨浩为帝,自己做大丞相,随后领兵十万北上,但被李密打败。宇文化及败走魏县(今河北大名东),毒死杨浩,自己称帝,建立郑国。第二年,过了皇帝瘾的宇文化及在聊城被窦建德杀死。
隋炀帝一死,李渊便甩开了隋恭帝,在618年(武德元年)逼杨侑禅位,称帝建立唐朝,改年号为武德,定都长安。