1946 年(民国 35 年) 月,全面内战爆发前后,阎锡山军队占领了晋北解放区十几座县城和大片乡村,并将其划分为北岳和关南两个作战区:以大同、怀仁、山阴、应县、朔县等县为北岳区,由第四十三军军长楚溪春率所部和残留日军 1.5万人防守;以宁武、崞县、代县、繁峙、五台、定襄、忻县等 县为关南区,由第十九军副军长于振河任总指挥,日本人今村(原日军滨成第五旅团参谋)为副总指挥,率兵守备。
为了反击阎军猖狂进攻,配合晋冀鲁豫军区部队在晋南的作战,切断阎军大同与太原之间的联系,晋绥军区领导人贺龙、李井泉奉中共中央军委命令,以晋绥军区部队为主,在晋察冀军区一部兵力的配合下,于 月中旬发动了晋北战役。采取"远交近攻,睦傅打阎"的方针,稳住傅作义,狠打阎锡山。战役共分四个阶段:
第一阶段。晋绥军区部队为不惊动傅作义,表示无意进攻临近绥东的大同、怀仁。6月16 日,由晋绥军区独立第二旅第十六团,雁门军区第二军分区的第一、二团,第九军分区的第十九团和二十支队,第五军分区的偏清支队等部,首先夺取朔县,歼灭守军 1200 余人。21 日,收复山阴。23 日,攻克岱岳镇,歼灭守军 300 余人。 30 日,在攻占宁武县城时,由于协同作战未组织好,城内守军千余人弃城逃往大牛店和原平。
第二阶段。晋绥军区部队连克朔县、宁武之后,乘胜东进,决心收复繁峙、代县、崞县。为了加强晋北战役的组织领导,统一晋绥和晋察冀部队的指挥,晋绥军区根据中共中央军委的命令,以抗大七分校为基础,组成晋北野战军司令部,由周士第任司令兼政委,贺炳炎任副司令,廖汉生任副政委。
7月初,晋绥、晋察冀部队向崞县方向转移。晋察冀军区第四旅在开进过程中,繁峙阎军闻风弃城,向代县方向逃跑,该旅于7月3日收复繁峙城。5日,第十一旅陈方仁旅长率五团、六团、十一团相继向代县进发。代县枣林据点阎军的一个排,城东一带治村村长、国民兵团团长杨时隆,均麇集二十里铺村,加上原驻守二十里铺的李生荣连,惊荒失措,惶惶不可终日。陈方仁旅先遣部队十一团团长邱会嵩率部包围二十里铺,一营担任主攻,炮兵连占领大敦素村柳沟高地,三营在磨坊堡一带警戒西逃之敌,县支队在东、西段景村警戒南逃之敌。上午,一营长吴久山对敌喊话,限令其缴械投降,敌杨时隆仍想负隅顽抗。下午3时,总攻开始,在柳沟的炮兵连重炮轰击后,勇士们架梯登堡墙而人,守敌多数交械投降,杨时隆当场被击毙,李生荣被俘。傍晚,十一团占领二十里铺。
当晚,陈方仁旅长率五团、六团开进二十里铺,与十一团会师。县城阎军及官员逃往崞县,第四旅占领代县城和阳明堡。7月6日,代县党政机关及地方武装部队进入县城,代县全境解放。
崞县驻有阎部第四十二师第二团和崞县、代县的"爱乡团"共 2300 余人,工事坚固,布防周密。 晋北野战军司令部经充分准备后,于11月21时,由晋绥独立第二旅向繁峙县城发起攻击。经过一夜激战,于12日晨占领崞县,共毙、伤、俘阎军 2200 余人。
第三阶段。晋绥部队连克朔县、宁武、崞县3座县城后,声威大振,原平阎军极为恐慌。当晋北野战军司令部率主力南下,向忻县方向进发时,原平守军约 5000 余人闻风向南逃窜,忻口之阎军也逃往忻县。晋察冀部队之第十一旅于14日进占原平、忻口。五台、定襄之阎军,于17 和19 日先后逃往忻县,第十一旅相继收复五台、定襄。尔后,晋北野战军司令部各部直逼忻县,对忻县形成四面包围态势。
晋绥军区部队围困忻县,威逼太原,阎锡山急命驻黄寨的第六十八师前往增援 。7月20日,阎军第六十八师第二〇二、二〇三团 2000 余人进至平社地区 。22 日夜,晋绥军区独立第二旅 3个团和雁门军区3个团向平社阎军第六十八师发起攻击。 23 日拂晓,第六十八师除400 余人逃回黄寨外,其余全部被歼。
第四阶段,进攻忻县。忻县是太原北部屏障,设防坚固,并有重兵驻守,城内外共有阎8000 余人。8月上旬,晋北野战军司令部所部经数天准备,两次发起进攻,均未奏效。因一时夺取困难甚大,又由于大同战役即将开始,晋察冀军区部队和晋绥军区的部分部队准备北上参战,故决定结束晋北战役,只留一部分主力和地方部队对忻县进行长期围困。
此次战役从6月16 日开始至 8月11 日止,历时58天,先后收复了朔县、宁武、山阴、崞县、繁峙、代县、原平、五台、定襄等县城和大小 100 余个据点,歼灭阎军 8600 余人,控制了同蒲路忻县以北地段,使大同阎军陷于孤立。