江差を早々に押さえた政府軍の兵力は、木古内口の攻防と、松前城下の恢復に注がれた。江差には、十二日、十五日と青森から人員と物資が到着し、兵力の補給と増強が行われていた。十五日に渡海を命じられた人数は、弘前藩兵四〇〇人を含めて三七一八人にのぼっていた。
四月十六日、政府軍は原口(はらぐち)(現北海道松前郡松前町原口)に陣を構えていた。この日は斥候(せっこう)隊の探索に重きが置かれ、翌日、松前を恢復すべく政府が大きく動き出した。まず、春日丸が海上より敵を引きつけ、発砲を開始し、松前へ追い立てていく。陸路からの軍勢もその後を追い松前へと迫っていった。旧幕府軍は折戸(おりと)の台場で必死の防戦を行ったが、長州藩・徳山藩の働きが大きく、ついに松前城を恢復した。この日の戦闘には、海上より六隻からなる艦隊が砲撃を加えていた。陸・海からの攻撃に旧幕府軍は退却せざるをえない。こうして、旧幕府勢は福島方面へ引き揚げ、知内(しりうち)を通り、木古内の守備の強化を図ることになった。
松前を奪回した政府軍は、次に小競り合いが続いていた木古内口への兵力増強を図った。二十日朝方に、旧幕府軍の不意をつく形で木古内へ攻め入った。砲台を奪われ、旧幕府軍は敗走するが、松前から引き揚げ知内に残留していた旧幕府軍が木古内の応援に現れ、さらに、海上から上陸を果たした一中隊も加わって、反撃を始めたため、地理にうとい政府軍は苦戦となった。稲穂峠方面へ三度引き揚げることとなった官軍兵士たちも疲労の極みに達し、また兵糧や武器の補充が緊急の課題となりつつあったことは、弘前藩士和田真吉の報告書にもみえるところである。
ところが、この夜、大鳥圭介が五稜郭の守備を強化して兵力の分散を防ぐため、茂辺地(もへじ)(現北海道上磯郡上磯町)までの味方の撤退を説得し、翌日転陣を行った。次いで二十一日矢不来(やふらい)(同前)まで後退し、五稜郭死守のための砦(とりで)を築いたのである。そして、可能な諸隊を五稜郭へ呼び戻した。こうした旧幕府軍の動きを知った政府軍は、二十二日、木古内に入り、松前からの隊と合流を果たしたのである。