大业十三年(公元617年)七月,李渊率军进攻宋老生驻守的霍邑,却逢秋雨连绵,无法开战,而且道路泥泞,军粮运输困难。相持数日,眼看军粮将尽,李渊准备退兵,李世民劝阻道:“今兵以义动,进战则克,退还则散;众散于前,敌乘于后,死之无日。”听了李世民的意见,李渊决定不撤兵。
八月,连日的阴天终于放晴,李渊遂下令攻城,并由李世民率兵诱敌出城,双方展开决战。李世民身先士卒,奋勇冲锋,“砍杀数十人,两刀皆缺,流血满袖”。霍邑一战,李渊大获全胜,斩杀了隋将宋老生,攻下了霍邑。随后,李渊率兵进攻河东郡,虽取得初战的胜利,但是隋将屈突通固守河东郡,李渊久攻不下。后根据李世民的建议,李渊留下部分兵力包围和牵制屈突通,自己率主力部队渡过黄河,直取长安。
同时,李渊在关中地区的家属和亲族也纷纷起兵响应,其中有李世民的胞妹平阳公主、李渊的从弟李神通,李渊的女婿段纶也在蓝田县聚众万余人。
在这种有利形势下,李渊父子一路上采取收揽人心的办法,废除了隋朝的严刑酷法,还开仓济贫。一面收编关中各地的起义军,一面争取关中地主阶级的支持。数月中,李渊、李世民的军队已达20万人,并于十月开始围攻长安。