面对六镇起义的动乱情况,北魏政府先后三度易帅,分别以淮王元彧、尚书令李崇、元渊为北征大都督,率军北进,镇压起义军,但与义军的交锋却一再失利。524年八月,六镇东西两部敕勒酋长带领部落牧民全都归附了起义军,义军完全控制了整片六镇地区。
随着六镇爆发起义,关陇、河北各族纷纷起兵响应,北魏政权摇摇欲坠、濒临崩溃。为了挽回颓势,镇压各地起义,维护其统治,北魏胡太后听取佞臣的意见,不得不求助于柔然可汗阿那瓌。两方联合起来镇压起义军。
柔然可汗阿那瓌应北魏王朝的邀请,率十万军兵自武川西面向沃野进攻,协助北魏朝廷镇压六镇起义。北魏皇帝为了笼络柔然大汗,还多次遣人送赠物资犒劳赏赐阿那瓌。
525年六月,破六韩拔陵率领大军打算从五原这个地方围剿北魏北征大都督元渊的军队,不幸遭到北魏军将领贺拔胜所带领的二百人军士的突然袭击,大军受挫后稍向后退。
敌对双方处于对峙局面,北魏北征大都督元渊于是派参军于谨分化离间西敕勒酋长,准备削弱起义军的势力。
于谨不负所托,说服西部敕勒酋长乜列河等率三万余户牧民叛变破六韩拔陵,向北魏投降,导致起义军的军兵人数大幅减少,军事力量与北魏立时显得十分悬殊。
破六韩拔陵为了阻止西部敕勒酋长乜列河向北魏叛变,于是领兵截击,可惜计划被元渊识破,并派兵在路上埋伏伺机伏击,破六韩拔陵兵败后撤退,可是又遭到柔然可汗阿那瓌大军的追击,以至兵力受到重创。
525年八月,柔然军与魏军会合,在五原大败义军主力,破六韩拔陵被元渊伏兵击败,又被阿那瓌所在的大部队主力在后面大举歼击,接连损兵折将,他无奈只好南渡北河(今内蒙古乌加河)。
不过自此以后,破六韩拔陵就下落不明(有传说是被柔然军所杀),六镇起义大军的余部被迫向北魏投降。
北魏统帅元渊因为有柔然可汗阿那瓌的协助,终于击溃了六镇的起义军,镇压战争取得了胜利。
北魏王朝将被俘义军和六镇居民20万人分别迁徙于冀、定、瀛三州(治今河北冀州、定州、河间)。六镇起义至此失败。
六镇起义虽然失败了,但却是沉重地打击了渐趋腐朽的北魏政权,影响遍及全国各地,并引发了关陇、河北人民地区的流民起义。
这些六镇被俘的20万兵民,北魏朝廷将他们全都安置在河北三州,不幸的是当时恰逢河北遭遇了先是洪水后又干旱的大灾荒,被俘的军民无粮可供食用,甚至是树根、草根都被一扫而空,灾民无处安身,出现了大量逃亡现象。二十万六镇军民走投无路,于是再度揭竿而起,反抗北魏朝廷。
这个时势下,高欢也是无法独善其身的,他与段荣和尉景带领着军队脱离起义军,但也不想向北魏投降,因为关陇和河北都接连有人民武装起义,于是高欢就向河北转移,他们日夜兼程来到河北地界。
高欢等人打探到柔玄镇人杜洛周在河北上谷(今河北怀来)聚众起义,改年号真王。于是高欢领兵向上谷进军,响应杜洛周,他们跟随起义大军攻陷附近郡县,收缴粮草物资供应自己的军队,使得自己的军事力量没有因乱世而被削弱。
到了九月份,杜洛周率义军围攻燕州(治今河北涿鹿)刺史崔秉。崔秉向北魏皇帝求救,要求朝廷出兵镇压杜洛周。
魏帝元诩收到崔秉的加急军报后,派遣幽州(今北京)刺史常景为行台(即将军),与幽州都督元谭同领官军征讨起义军。
官兵在河北沿途置兵,占领险要,阻止义军南攻。只是官军虽然庞大,朝廷和地方政府均贪敛粮草军饷,以至官兵要饿着肚子去打仗,军心浮躁,战斗力不佳。
双方僵持不下,到了第二年正月,因为长期缺乏粮食供给,北魏驻扎安州(治今河北隆化)的官军中约2万名官兵为求生存背叛北魏,响应杜洛周,加入了起义军。
杜洛周率领义军与之会合。北魏将军常景派兵于军都关拦截背叛的官兵,被杜洛周的义军打败。杜洛周攻破扼守军都、居庸两关的北魏官军后,便南下幽州(今北京),打算继续扩充地盘。
是年四月,杜洛周带领起义军自河北上谷南下,进攻蓟城(今北京大兴),打败都督李琚,但因为受到北魏将军常景的截击,被迫退还上谷。
到了十一月,杜洛周再次带领起义军围攻范阳(今河北涿州)。范阳城守将为了将粮食供应给官兵,就对城内的百姓巧取豪夺,