본래 고구려의 땅이었는데 뒤에 발해의 영토가 되었다가 여진의 거주지가 되었다. 고려초에 신도군(信都郡, 또는 古德縣)이라 하였으며, 960년(광종 11)습홀(濕忽)에 성을 쌓고 승격시켜 가주(嘉州)라 하였다.
995년(성종 14) 방어사(防禦使)를 두고, 1221년(고종 8) 모반사건이 있었다 하여 낮추어 무령(撫寧)이라 하였다. 1231년 몽고병을 피하여 섬으로 옮겼다가 1261년(원종 2) 육지로 나와 태(泰)·박(博)·무(撫)·위(渭) 등의 주(州)를 모두 가산에 붙여 5성겸관(五城兼官)으로 하고 뒤에 태·무·위 등 3주를 따로 분리하고, 1371년(공민왕 20) 박주까지 완전히 분리하였다.
1413년(태종 13) 가산으로 고치고 군이 되었는데, 1802년(순조 2)에 강등하여 현이 되었다가 1822년 다시 군으로 승격하였다. 1895년(고종 32)의주부 가산군, 1896년평안북도 가산군이 되었으며 1914년 행정구역개편으로 박천군에 병합되어 가산면이 되었다.