본래 고구려의 땅으로, 한때 발해의 영토가 되기도 하였다. 고려 초에 신도군(信都郡, 또는 古德縣)이라 하였는데, 960년(광종 11) 습홀(濕忽)에 성을 쌓고 승격시켜 가주라 칭하였다. 995년(성종 14) 방어사(防禦使)로 대체하였다.
1221년(고종 8) 반역이 일어났다 하여 무령(撫寧)으로 낮추었으며, 1231년 몽고병을 피하여 해도(海島)로 옮겼다가 1261년(원종 2) 육지로 나와서 태주(泰州)·박주(博州)·무주(撫州)·위주(渭州) 등을 모두 가주군에 예속시키는 5성겸관(五城兼官)을 두었다.
뒤에 태주·무주·위주의 3주는 독립시키고 박주군만은 그대로 두었다가 1371년(공민왕 20) 떨어져 나갔다. 1413년(태종 13)가산군(嘉山郡)이라 개칭하고 현·군을 되풀이하였다. 1914년 행정구역개편에 따라 새로운 박천군에 편입되어 가산면과 양가면이 되었다.