司马颖接受司马颙让他防守洛阳黄河大桥的命令,率军到达洛阳,命将军楼褒带兵防守大桥。司马模派将军宋胄进攻,楼褒不敌,向西撤退;又派前锋督护冯嵩和宋胄会合,进逼洛阳。司马颖看到勤王军势不可挡,十分恐惧,于是逃往关中,到达华阴(今陕西华阴市)后,有消息传来,说司马颙和司马越和解了,他顿时不敢继续前进。
建武将军吕朗在荥阳(今河南荥阳市)驻守,刘琨拿张方的人头展示给他看,吕朗顿时泄气,乖乖地出城投降了。司马越派祁弘、宋胄、司马纂带领鲜卑精骑西行迎接惠帝圣驾,命周馥在渑池(今河南渑池县)驻扎。永兴三年(306)四月十三日,司马越本人率大军到温县扎营。
司马颙派彭随、刁默率军在关东湖县(今河南灵宝市)构筑堡垒抵挡祁弘等人。不想他们战斗力很强,五月七日大败刁默,之后继续向西挺进关内,又在灞河打败司马颙的部将马瞻和郭伟。
此时的司马颙精锐尽失,已无力抵挡,只能单枪匹马逃入太白山(秦岭山脉最高峰,跨太白县、眉县、周至县三县)。祁弘等人率军进入长安城,纵容部属进城后大肆抢掠,野蛮地杀死了两万多人,大臣们四散奔逃,跑得快的逃到了秦岭群山中,没有吃的就捡拾柞树果子果腹。
五月十四日,祁弘等人伺候着晋惠帝司马衷登上牛车,公卿大臣步行,随皇帝东归洛阳,梁柳为镇西将军,留下镇守关中。六月一日,惠帝到了洛阳,他登上昔日宫殿,坐上宝座,觉得恍如隔世,不禁感伤落泪。之后他前往拜谒太庙,恢复了羊献容的皇后身份,大赦天下,改年号为“光熙”。
这边刚走,司马颙的部将马瞻等人又杀回了长安,杀死了留守将军梁柳,然后到山里找到司马颙,把他接回了长安。听说长安失守,安定太守贾疋(yǎ,曹操手下著名谋士贾诩的曾孙)等人起兵反攻,马瞻等人被杀。司马越派督护麋(mí)晃带兵支援,司马颙派牵秀迎战。
司马颙的长史杨腾一看主子大势已去,暗中投靠了司马越。他假传司马颙的命令让牵秀停止行动,然后找准机会把牵秀杀死了。至此,除了孤零零的长安城,关中其他地区全部归了司马越。
永兴三年(306)八月,晋惠帝任命东海王司马越为太傅、录尚书事;范阳王司马虓为司空,镇守邺城;平昌公司马模为镇东大将军,镇守许昌;王浚为骠骑大将军和都督东夷、河北诸军事,兼任幽州刺史。
司马越喜欢名士,一时间府中名士聚集:庾敳(ái,出身魏晋名门颍川庾氏)为军咨祭酒,胡毋辅之为从事中郎,郭象(玄学家)为主簿,阮修为行参军,谢鲲(谢安的伯父)为掾,另外还有名士潘滔、裴邈等人。这些人名号虽大,但都崇尚清谈,对社会管理事务漠不关心,个个嗜酒如命,行为怪诞。