魏军步步压迫,盖吴当然不能坐以待毙,当年十一月,派遣另一支部队的统帅白广平率军西攻汧城(今陕西陇县);盖吴亲自率军进攻李闰堡(今陕西省大荔县东北)。义军兵锋四出,安定诸胡群起响应,义军声势浩大。盖吴打蛇随棍上,分兵进攻临晋(今陕西大荔东南)以东,被魏国大将章直率军击败,义军逃跑,溺死于黄河的多达三万余人。义军遭到了毁灭性的打击,盖吴无奈,向西方发展,率军向长安进军。义军挺进到渭北,遭到魏国大将叔孙拔部的阻击,三万余人战死。
在义军遭受了空前挫败的时节,迁居于河东(今山西永济西南)蜀人薛永宗聚众响应盖吴,率军袭击闻喜(今山西闻喜),被当地地主武装所击退。
因为起义风起云涌,官军疲于奔命,拓跋焘命令地方豪强薛拔纠合宗族百姓,列营于黄河沿岸,阻断盖吴和薛永宗两部义军往来之路。命令殿中尚书拓跋处直等人率领二万骑兵进攻薛永宗的义军,殿中尚书乙拔率三万骑兵进攻盖吴的义军,西平公寇提率一万骑兵攻打白广平义军。
南朝宋元嘉二十三年(公元446年)正月,因为起义没有被扑灭的迹象,拓跋焘亲自出马,率大军到达东雍州(治今山西临汾),亲自指挥攻打薛永宗坚守的城垒。
拓跋焘率军抵近义军的营垒,用马鞭指向前方,问崔浩:“今日可以攻击吗?”
崔浩回答说:“薛永宗未知陛下自来,人心安闲。现在北风迅疾,风沙遮面,不利于防守,我军应该马上攻击,须臾必碎。若待明日,恐其见官军盛大,必夜遁走。”
拓跋焘深以为然,命令军队立刻进攻。魏军各路大军齐头并进,在第二天完成了对义军的合围。随后,魏军全力进击,夺取了薛永宗军队固守的营垒。义军死伤惨重,几乎全军覆没,薛永宗走投无路,与家人皆赴汾河水而死。
第二天,拓跋焘从汾河北部渡河,率军到达洛水桥。这时斥候报告,盖吴军队主力驻扎在长安以北。拓跋焘认为渭水以北之地无谷草,人马没有食物,打算渡过渭水,到达渭南,然后顺着渭水西进。但还是觉得有些不托底,于是询问崔浩:“盖吴在长安北九十里。渭北地空,谷草不备。欲渡渭南西行,这样行吗?”
盖吴就是一流寇,没有严密的行军计划,到处流窜,抓住就不能撒手,干嘛还要兜圈子。崔浩不以为然的说:“盖吴军营离我军只有六十里,贼魁所在。击蛇之法,当须破头,头破则尾岂能复动?应该乘势先击盖吴主力。现在决定进攻,一日便到。我认为应该从北道进攻,若从南道迂回,那么,盖吴就会从容的进入北地山,我军就不能很快的消灭他。”
尽管崔浩言之有理,但不知道是什么原因,拓跋焘没有听从,仍然按照自己的想法办。率军沿渭水南岸西进,抵达戏水(今陕西临潼东北)。
这么长的时间,军队的行踪如何瞒得住。盖吴得到了拓跋焘迂回进攻的消息,果然散入北地山打游击。魏军主力扑空,这一趟算是白玩了。
拓跋焘站在盖吴军队空无一人的营垒前,心中大为后悔。
拓跋焘没有能够抓住战机,无奈之下返回长安,所过之处,拿老百姓泄愤,认为有同情盖吴义军的,一律按通敌论罪,直接就剁了。
拓跋焘无功而返,他的手下将领却斩获颇丰,乙拔等人率诸军在杏城遭遇了义军主力,大破盖吴义军。盖吴狼狈逃跑,途中遣使向宋国求援。宋文帝刘义隆任命盖吴为都督关、陇诸军事、雍州刺史、北地公;并命令雍、梁二州长官陈兵于边境,以为义军声援。
当年五月,盖吴收集所部兵马,聚于杏城,自号秦地王,声势复振。拓跋焘派遣永昌王拓跋仁、高凉王拓跋那督长安以北诸军进攻盖吴。六月,北魏征发冀、相、定三州军马二万人,驻扎在长安南山诸谷,以防盖吴率军逃逸;又征发司、幽、定、冀四州兵共十万,修筑京畿外围要塞,广纵千里,以堵击盖吴义军。
八月,北魏高凉王拓跋那击破盖吴军队主力,夺取杏城,俘虏了他的两位叔叔。拓跋那一反斩尽杀绝的惯用伎俩,恩威并施,予以收买之后放回。不久,盖吴被其叔所杀(一说在作战时中流矢而亡)。盖吴一死,义军遭受了重大打击,拓跋仁乘胜进军,相继击败了白广平、路那罗等义军,至此,盖吴起义失败。