東晉孝武帝太元二年(377年),由於前秦已壹統北部中國,東晉王朝受到空前的軍事壓力,因此詔求良將鎮禦北方。當時的權臣謝安遂任命其侄子謝玄應舉。朝廷任命謝玄為建武將軍、兗州刺史、領廣陵相、監江北諸軍事,鎮廣陵。其時廣陵和京口聚居著大量逃避北方戰亂而來的流民,謝玄到任後,在這些人中選拔驍勇士卒如劉牢之等,建立了壹支軍隊,太元四年(379年),謝玄改鎮京口,因為當時京口又名北府,故而其軍得名北府兵。
太元八年(383年),北府軍在淝水之戰中壹舉擊敗前秦大軍,乘勢追擊,劉牢之壹度追到鄴。太元十二年(387年),謝玄被解除了北府軍的領導權,司馬怡、王恭先後代之,北府軍軍閥化。晉安帝隆安元年(397年),王恭率北府軍起兵反晉,次年劉牢之殺之,代之為北府軍領袖。此後北府軍主要致力於鎮壓孫恩、盧循的天師道起義軍。
晉安帝元興元年(402年),北府軍奉命征討在荊州割據的桓玄,劉牢之隨即投降桓玄,桓玄稱帝後削減劉牢之兵權,劉牢之意圖起兵對抗桓玄,然由於投降桓玄早已喪失人心,眾叛親離下自殺。元興三年(404年),原北府軍參軍劉裕率余部在京口起兵反抗桓玄,並殺之。此後,北府軍成為劉裕的軍事支柱。420年,劉裕稱帝,建立宋,北府軍成為其皇家軍隊的主力。