予期せぬ浅井長政の挙兵によって朝倉征伐(金ヶ崎の退き口)に失敗し、撤退を余儀なくされた織田信長が近江国の朽木を経て京都に戻ったのは元亀元年(1570)4月30日のことであった。
京都で体勢を立て直した信長は5月9日に2万の軍勢を率いて進発し、本拠である美濃国岐阜城へと向かう。その道中では、かつて近江国南域を領し、信長によって駆逐された六角義賢が残党を煽動して帰国を阻もうとしていたが、これと戦いつつ宇佐山城・永原城・長光寺城などの要衝に重臣を配し、千種越えで21日に岐阜に帰着した。六角義賢の放った刺客・杉谷善住坊に狙撃されたのは、このときである。
帰国した信長は、朝倉氏のみならず浅井氏をも討滅する決意を固め、同盟者である三河国の徳川家康に援軍を要請した。
一方、信長を討ちもらした浅井長政はその反撃を予見し、美濃との国境に近い長比(たけくらべ)や刈安尾に城砦を築くとともに横山城・鎌刃城の守備を固めて防衛網を布いていたが、信長の命を受けた羽柴秀吉や竹中重治の調略によって長比城の樋口直房、鎌刃城の堀秀村が織田方に寝返ったばかりか箕浦城までもが織田方の手に落ちたため、早くも防衛網に綻びが生じるところとなったのである。
浅井氏の本城・小谷城の防衛網に風穴を開けることに成功した信長は直ちに軍勢を率いて岐阜を出発、6月19日には織田方となった長比城に着陣した。その陣容は、尾張・美濃・伊勢国より催した1万8千の兵に加え、援軍として徳川家康から派遣された兵力が3千、総勢2万1千ほどである。
浅井方は、同盟関係にある越前国の朝倉氏に援軍を要請するとともに、横山城や大原観音寺に3千の軍勢を投入して防備を固めていたが、信長はこの防衛線を無視して小谷城に向けて進軍し、21日には森可成を雲雀山に、自らは小谷城の南西約4キロに位置する虎御前山(虎姫山)に本陣を据え、坂井政尚・斎藤長龍・市橋長利・佐藤正秋・不破光治・樋口直房・池田恒興らに小谷城下に放火させた。
この放火という行為は城に籠もる軍勢を挑発するための常套手段である。信長は野戦で決着をつけようと目論んでいたようだが、浅井勢はこれには乗らず、城に籠もったままであった。
動かぬ浅井勢に対して信長は、小谷城の南方約9キロに位置する横山城を攻めて小谷城からの来援を誘うこととし、翌22日には本陣の移動を始めた。この動きを察知した小谷城から追撃隊が繰り出されて戦闘になったが、殿軍の簗田広正・佐々成政・中条家忠らの活躍によって織田勢は無事に龍ヶ鼻までの移動を完了した(八相山の退口)。
横山城への攻撃は24日から始められた。北の大手犬飼坂からは池田恒興・坂井政尚・羽柴秀吉、南の観音寺坂からは森可成・丹羽長秀・蜂屋頼隆、東の大原坂口からは柴田勝家・氏家卜全、西の石田口からは佐久間信盛・稲葉一鉄・水野信元・市橋長利・河尻秀隆らという布陣である。
大軍による包囲攻撃を受けることとなった横山城では、かねてより小谷城に救援要請を行っていたが、そこに朝倉景健率いる救援軍の先鋒隊1万が小谷城南東の大依山(大寄山)に到着する。26日には長政も軍勢を率いて大依山で朝倉勢に合流しており、軍議の結果、横山城の救援は危急を要するので朝倉義景率いる救援軍の本隊を待たず、27日の夜半に大依山から野村・三田村に兵を進めるということになった。
この間に織田陣営にも徳川家康が5千の兵を率いて到着し、その兵力は2万6千ほどに膨れ上がる。浅井・朝倉勢が出陣の準備をしていたであろう27日の夜、信長は夥しく蠢く大依山の篝火を見て進軍のあることを察知したといい、直ちに応戦の手配りに取り掛かった。
6月28日未明、両陣営ともに姉川畔に布陣を完了した。姉川を挟んで北側に浅井・朝倉連合軍、南側に織田・徳川連合軍である。
浅井軍は野村に陣を置き、第一陣に磯野員昌隊1千5百、第二陣に浅井政澄隊1千、第三陣に阿閉貞秀隊1千、第四陣は新庄直頼隊1千で、その背後に長政自ら3千5百の軍勢を率いて出陣している。
朝倉軍は三田村に布陣し、第一陣が朝倉景紀隊3千、第二陣が前波新八郎隊3千、第三陣が朝倉軍大将の朝倉景健隊4千という陣容だった。
それに相対する織田・徳川連合軍は、浅井軍の対岸に織田軍が布陣し、第一陣に坂井政尚隊3千、第二陣に池田恒興隊3千、第三陣に羽柴秀吉隊3千、第四陣に柴田勝家隊3千、第五陣は森可成隊3千、第六陣に佐久間信盛隊3千、そして本隊に信長が5千の兵を率いるという陣立てであった。
朝倉軍の対岸に徳川軍が布陣し、第一陣に酒井忠次隊1千、第二陣に小笠原氏助隊1千、第三陣に石川数正隊1千、第四陣が本隊で徳川家康2千という陣容に、稲葉一鉄隊1千が加勢する。
そして丹羽長秀・氏家卜全・安藤守就に5千の兵を与えて横山城の抑えとした。
ただし、この陣容や兵数については史書によって記述が異なる。
午前6時頃、三田村の徳川軍と朝倉軍の間で戦いの火ぶたが切られた。この衝突を合図に、織田軍と浅井軍の激突も始まり、両軍入り乱れての乱戦が展開されることになった。
朝倉軍と徳川軍の戦いでは、倍の兵数を擁する朝倉軍が優勢だったが、家康は押され気味の局面を打開するため、榊原康政に命じて姉川の川下から迂回させ、朝倉軍の側面から奇襲攻撃をかけさせたのである。これは朝倉軍にとって全く予期していなかったことで、それまで優勢だった朝倉軍がにわかに崩れはじめたのである。
時を同じくして行われていた織田軍と浅井軍の戦いでは、兵数で劣るはずの浅井軍先鋒・磯野隊が猛攻によって織田軍の第一陣、第二陣と突き破り、羽柴・柴田隊をも崩して信長本陣にも迫る勢いであったが、それを見て取った横山城監視役の命を受けていた氏家卜全・安藤守就らが遊軍となって浅井軍の左翼を突き、さらには稲葉一鉄隊が右翼側から挟撃したため浅井軍は退路を断たれることを恐れて浮き足だち、全軍が総崩れとなって小谷城に向けて敗走を始めたのである。
この中にあって、浅井方の将・遠藤直経はなんとしてでも信長の首級を挙げたいと思い、朋輩の三田村市左衛門の首を提げて織田将兵に扮し、信長本陣に紛れ込もうとしたが、竹中重隆に見破られて討ち取られたという。
戦闘は午前10時頃には浅井・朝倉軍の潰走によって大勢が決した。この合戦での死傷者数は史料によってまちまちであるため不詳であると言わざるを得ないが、双方共に多くの将兵を失って損耗が大きく、織田・徳川連合軍は浅井・朝倉連合軍を大依山や虎御前山まで追撃したものの、守兵2千を残す小谷城の攻略は断念せざるを得ず、後詰を失った横山城を降伏させるに止まった。しかし横山城を手中に納めた意義は大きく、ここに羽柴秀吉を入れて小谷城への抑えとした。
7月1日には佐和山城に逃れて籠もっていた磯野員昌を攻めたが、容易に陥落しなかったため周辺に諸将を配して長期包囲の態勢を固めた。
この後、信長は4日に上洛、8日に岐阜に帰った。
なお、この合戦を織田・浅井方の史料では野村の合戦、朝倉方では三田村の合戦、徳川方の史料では姉川の合戦と称している。