這時,之前護送劉鬆山靈柩還鄉的劉錦棠率領老湘營從湖南趕到。左宗棠給他增撥龍錫慶和熊隆名的四營騎兵和步兵,令他的部將何作霖率領四千人先從平番奔赴碾伯。劉錦棠自率五千人繼進,又令馮邦棅加緊催促回民軍呈繳馬匹和武器,把回民軍拖住。
到此為止,河州的回民軍呈繳了全部馬匹和武器。左宗棠下令張貼告示,允許他們就撫,並逐步將陝西回民和外來回民遷出,並於同一天批準河州回民首領馬占鼇求撫,將三千三百四十四名回民和漢民遷移到安定和平涼等地安插。
8月,肅州回民軍首領馬文祿求撫,徐占彪認為他並非誠心想要投降,予以拒絕。回民軍悄悄出城,占據廢堡,收割糧食。每次出城都被清軍擊退。徐占彪分兵環城駐紮,但因兵力不夠,剩下北門無法合圍。回民軍每天出城攻打清軍營壘,清軍四處抵禦,斬殺大批回民軍。
劉錦棠率老湘營先後進駐碾伯,聲言要進攻大南川和小南川的陝西回民軍。部隊剛剛開到平戎驛,馬桂源已集結西寧本地回民軍,約好陝西回民軍一起起事。他們共同推舉馬桂源之兄、代理西寧遊擊馬本源為元帥,統帥城內的回民部隊和百姓。另一回民首領馬永福根本無法製止。
西寧城東北有湟水作為屏障,從大峽口直達小峽口,有八十多裏,其間高峰危聳,中間隻有一線河岸可通,路寬隻有幾尺。南麵和北麵則是溝岔縱橫。回民軍在其中依險屯駐,防守清軍。
回民軍連續幾天攻擊劉錦棠部營壘,每戰都出動大批兵力,彌山塞穀,四處襲擊。湘軍從湟水兩岸夾擊,忽南忽北,輪流援應。湘軍一直戰到9月29日,才奪取了陝西回民軍的南川軍營。隨後又接連攻破駱駝堡、觀音堂溝各寨。部隊冒險深入,往往列隊露立風雪之中,晝夜不得休息,先後擊殺上萬名回民軍。
劉錦棠部奪占高寨,在湟水北岸增修壁壘,並先後擊殺兩千名回民軍。他分兵扼守要隘,移營駐紮高寨。湘軍進襲小峽口的回民軍軍營,奪得山麓的三座壁壘。小峽之內的一萬多名回民軍援兵並力殺來爭奪,從早晨戰到下午,湘軍將士裹創力戰,才將回民軍擊退。回民軍分兵抄襲湘軍後路軍營,都被何作霖部擊敗。
劉錦棠挑選精銳將士攻打南山各卡,他自己則領兵攻打北山壁壘。湘軍抬炮攻到山腰,回民軍從各個壁壘出擊,從小峽口分三路進攻。劉錦棠分兵抵禦,令鄧增測準回民軍的壁壘,用大炮轟擊。
頃刻間,各壘牆障坍塌。劉錦棠揮師猛進,士卒無不一以當百,回民軍大亂,全線潰敗,湘軍隨即攻破北山四麵卡壘,乘勝從山梁俯衝而下。回民軍分兩路迅速撤退,峽內的各個軍營頓時瓦解,丟棄的馬匹、騾子和武器堆積成山。當晚,馬桂源和馬本源縱火焚燒東關,率領所有回民首領奔向東川。
湘軍主力抵達東關。城中被圍已有兩個多月,西寧道郭襄之和知縣恩祿率領男女難民三萬多人出城迎接湘軍,喜極而泣。城內尚存一千多名回民,劉錦棠令他們全部在原地安居。於是,附城內的本地回民紛紛出城請求安撫。陝西回民軍崔偉和禹得彥等部敗居西川,也紛紛到湘軍軍營請求投降。劉錦棠令他們即日呈繳馬匹和武器。馬桂源見勢頭不對,繼續逃亡,進入巴燕戎格,跟隨他的回民陸續逃回,接受安撫。
1872年1月,左宗棠率軍從蘭州出發進軍隴西。左宗棠還把肅州視為通往新疆的通道,認為隴中局勢,\"自宜先規河、湟\",\"然後一意西指\"。這樣,他派徐占彪赴肅州的目的除替出成祿出關之外,就是要消滅肅州回軍,以打開西進的道路。1月7日,徐占彪軍馳抵高台,與成祿會晤,交接防務,開始對肅州發動進攻。肅州回民起義軍首領馬文祿率部抵抗長達一年九個多月。
這個時候,馬占鼇已經被左宗棠所展現的決心和意誌所所驚懼,於是派遣馬俊去左宗棠大營請降。為了進一步表示自己的誠心,馬占鼇還把自己的兒子馬安良送到左宗棠大營當人質。在這樣的情形下,左宗棠同意了馬占鼇的請降,3月18日,左宗棠派遣部隊進駐河州。投降後的馬占鼇被任命為清軍將領,此後,他為左宗棠招降回民,提供了巨大的幫助。