『史記』によれば殷末の帝辛は凶悪な暴君として知られ、 重税を課し、 諫めるものを殺し、 先祖を祀るのに生贄として多くの人間を殺したために民衆は殷の支配を嫌うようになった。 また、殷末期には外征も行われ、 諸侯は次第に殷を倒す密議をするようになった。
帝辛はこれを知って怒り、 ある日密議に加わった諸侯らを偽って招き、 殺して塩漬けにした。 周の君主である西伯の姫昌は篤実な性格でこの密議には加わっていなかったが、 帝辛に疑われて奴隷とされた。 さらに帝辛は殷の人質となっていた昌の長男伯邑考を羹(あつもの、スープのこと)にして昌に食べさせた。 昌の家臣たちが帝辛に莫大な贈物をしたので昌の疑いは晴れて解放されたが、 昌はこれを恨んで殷に復讐する決意を固めた。
昌は周に戻ったのち、 近隣の諸国を併呑して国力を増大させ、 さらに殷に恨みをもつ諸侯たちの間に手を回して次第に殷に対抗できるだけの力を持つに至った。 しかし、老齢の昌は殷との対決を目前にして亡くなってしまう。
昌の後を継いで次男の姫発が周の太子として諸侯をまとめ、 殷に決戦を挑むことになった。
発の率いる軍は殷の虚をついて決起し、 諸侯の軍もこれに加わって瞬く間に大軍となった。 殷軍は為す術もなく周軍は侵攻したが、 発は「いまだそのときではない」と言って突如として軍を返し、 周へと帰国した。
この理由は不明とされているが、
数年後、発はまたしても軍を発して殷を攻めた。
この際には様々な瑞兆があったといわれている。
周軍は盟津という港から黄河を渡ろうとしたが、
雷雨と暴風に邪魔されて河を渡ることが出来なかった。
発は怒り、
黄河の神に向かって「天命は既に下ったのだ。どうしてわたしの邪魔をするのか」と大喝すると嵐はやみ、
周軍は河を渡ることができた。
また、河を渡る船の中に白魚が飛び込んできた。
白は殷のシンボルカラーである。
周軍と殷軍は殷の首都の朝歌に近い牧野で決戦することになった。 『史記・周本紀』によれば殷の準備は万全で70万という大軍を動員した、 一方で周軍は諸侯の軍を加えても40万であった。 しかも決戦を前にまたしても雷雨に見舞われ周軍の諸将は敗戦を恐れたが、 発は殷の天乙 (湯) が夏の桀を破って王朝をひらいた鳴条の戦いにおいても雷雨がとまらなかったといわれていることから、 むしろこれは周が勝って王朝をひらくという前触れであると言って全軍を勇気づけた。
殷軍は数の上では遥かに優勢であったが、 その数は戦場にて不吉を祓うための神官を含んでいるうえに、 殷に服属している小諸国の軍や、 奴隷兵から成り立っていた。 彼らも暴虐な帝辛の支配に嫌気がさしていたので、 呂尚のもとで先進化された周軍の攻勢をみるや矛先を変えて襲い掛かり、 殷軍は壊滅した。
周軍は帝辛を追って朝歌まで攻め入り、 帝辛は王宮に火を放って死んだ。 発は帝辛の遺体に三本の矢を放ってから鉞で首を落としたという。 『尚書』牧誓によれば、この日の干支は甲子であると記され、 出土した青銅器銘文でも確認されている。 ここに600年に及んだ殷王朝は倒れ、 発は周王朝を開いて武王として即位した。
牧野の戦いは文献によれば大規模な大軍同士の戦闘とされるが、 青銅器銘文や甲骨文においては「大邑商に克つ」と記されたものがあり、 戦闘は殷の邑を先制して周が襲撃したものであるとも考えられている。