陝西回亂時,甘肅回民也相繼起事響應。先是河州的閔殿臣、馬悟真、馬永瑞、馬永琳等攻克了狄道城(今臨洮),城內居民十萬餘盡被殺。回軍又推馬佔鰲為都招討,攻下河州,幫助清軍守城的萬餘漢人全部被處死。1867年9月,河州回軍假降,陝甘總督穆圖善出省受降,差點被生擒!
1871年春,左宗棠已經剿滅寧夏金積堡馬化龍。是年秋,兵分三路向河州進軍:中路以傅先宗率鄂軍40營(多隆阿舊部)由狄道進兵,一半渡河西進,一半留駐洮河東岸;左路以楊世俊率楚軍20營,從狄道之南關坪進峽城;右路分別以劉明燈率楚軍10營由馬盤監經紅土窯進康家崖,徐文秀率10營由靜寧經會寧抵康家崖。並令洮州土司楊元率「番兵」四千餘,把守拉卜塄、槐樹關、沙馬關、石關、新城堡等地,一併受楊世俊節制。三路清軍在洮河東岸的康家崖一帶會師後,渡洮河西進,攻取河州門戶太子寺。另外令徐佔彪率川軍20營由中衛南下靖遠、會寧、安定一帶,以護衛蘭州。這樣,清軍總兵力達到了3.5萬餘人。
劉明燈、徐文秀兩部首先拿下康家崖,回軍撤往三甲集一帶。左宗棠令中路傅先宗部和左路楊世俊部在狄道用渡船搭造浮橋,派出12營清軍過河結壘,以掩護右路清軍渡河。回軍在洮河西岸掘壕數道,並築有炮臺,嚴密防守。康家崖水深流急,清軍多次搶渡都被回軍擊退。11月中旬,前福建布政使王德榜率左宗棠親兵等馬步5營,由康家崖東南六十餘裡的站灘間道過狄道浮橋,與中路、左路清軍配合,猛攻黑山頭等回軍據點,徐文秀、劉明燈部乘機在康家崖、新添鋪渡過洮河。
清軍渡河後,急攻三甲集。經過三晝夜激戰,清軍攻克三甲集,回軍退至太子寺(今廣河縣城)。太子寺在三甲集西南三十餘裡,是回軍的重要根據地。馬佔鰲令回軍在太子寺外挖了一道長壕,深約二丈餘,寬四丈餘,並在險要處設置了許多壘卡,與廣通河北岸的許多回民村堡互為犄角。清軍經大東鄉和董家山向太子寺進攻,回軍依託有利地形頑強抵抗,清軍損失慘重,轉而從南面進攻。
清軍40餘營兵力密布於太子寺南面二十餘裡的新路坡。馬佔鰲令馬海晏率回軍數百人乘夜暗潛入新路坡,佔領山頭;又密派千人挑水運土,澆水築牆,當時正是隆冬季節,滴水成冰,一夜之間回軍就築成了一座光滑堅硬的堡壘。此時正是同治十一年正月初六。第二天,清軍發現回軍堡壘突然出現在他們陣地中間時,大為震驚。傅先宗立即調派部隊,親自督攻,不料中彈身亡,回軍乘機掩殺,清軍大敗。正月十一日夜,回軍又發起猛攻,全殲徐文秀所部,總兵鄭守南、李其祥、楊文林、劉篤志,副將盧才華、王福昌,參將吳明勝等26名將領全部以身殉國,楊世俊率殘部倒退30裡,據守三甲集。這是左宗棠自出兵以來最大一次失敗。
回軍建議馬佔鰲乘勝追擊,馬佔鰲卻認為太子寺一仗雖然大獲全勝,但總的形勢仍然是敵強我弱,太平天國失敗了,自彥虎失敗了,馬化龍犧牲了,光靠河州一地,不以足抗拒清軍;即使左宗棠離去,還會有無數個左宗棠來,長此交戰下去,回軍遲早會被清兵蠶食,而且恐被清軍「善後」(大屠或大遷徙)。於是,馬佔鰲決定向左宗棠投降,雙方談了半年時間才談攏。馬佔鰲及其子馬安良降清後,歸於董福祥部,為了好好表現,開始彎弓反射,協助清軍鎮壓甘肅其餘地方的回軍,由於作戰勇猛,終於取得了左宗棠的信任。清廷給了馬佔鰲六品軍功頂戴。他逝世後,他的兒子馬安良接替了他的職務,又隨董福祥部收復新疆。這才有了民國時期的「西北三馬」:馬步芳、馬步青、馬鴻逵。後來,西路軍經河西走廊北上時,遭受到了馬步芳的圍追堵截,2萬餘人幾乎全軍覆沒。