在1606年也就是李自成出生的那一年,上天又派下來一個終結明王朝的人,他的名字叫做張獻忠。張獻忠小的時候曾經讀過書,認識兩個字。長大後參了軍,曾經當過延安府捕快,犯了一件事,捕快這官就丟了,張獻忠又去延綏鎮去當兵結果犯了法,罪過很大,按照當時的律法《大明律》的話,要被斬首。他的上級陳洪範看出張獻忠長得很奇特,不是一般人,於是就幫他向求情於總兵官王威,僅僅重打一百軍棍,就開除了軍籍,於是他就坐回了老百姓。
這時候,大家都要造反,張獻忠響應了王嘉胤的號召起兵,於是自稱“八大王”,也就是西營八大王,後來參加了王自用(王自用是王嘉胤的盟友)的聯軍,王自用的聯軍由三十六個營組成,他那就成為了王自用聯軍的重要一員。王嘉胤後來在同明軍戰將曹文詔大戰時,被奸細殺害了,日後的高迎祥,李自成,張獻忠其實都是他的部下)王嘉胤雖然死了,但是起義軍的反明鬥爭不會因此結束,三十六營的各位統領擁護高迎祥為王,高迎祥也就成為了第一任闖王,李自成,張獻忠就一起做了高迎祥麾下的闖將,關係十分親密。但是不就以後,因為戰略目標不同,發生了嚴重的分歧。李自成想打的是黃河流域,張獻忠想打的是長江流域。
崇禎十年,張獻忠遭到了明軍總兵官左良玉(現在的南明大將)部的進攻,張獻忠的起義部隊嚴重受損,本人也受傷,政治上發生動搖,準備投降。次年正月,張獻忠率本部義軍進駐穀城受朝庭招安授予副將。駐地王家河,易名太平鎮,以示休兵。張獻忠被招安,既不按原安排遣散義軍,更不參加對李自成部義軍的戰鬥,而是把守一地加強軍事訓練,保持自主權。其實除了沒有名號,就是一方豪強。
兩年之後,他又造反了,因為張獻忠對官府腐敗官僚無止境的索賄、敲詐、對自己的刁難、不信任已感不滿,加之受到李自成的影響,五月初九采用“避實搗虛”“以走致辭敵”的有效戰術,重舉反明的大旗。以走製敵,轉戰四川境,使明軍疲於奔命。十四年,大敗明軍於開縣黃陵城,長驅出川,破襄陽,殺襄王朱翊銘,進破光州等地。明督師楊嗣昌(他也是崇禎朝的名人)因追剿失敗,憂懼交加,舊病複發,在沙市去世。
義軍接著又渡長江攻下樊城,與羅汝才合兵北上。四月,攻應山不下,轉攻隨州,克之。六月,張獻忠率部打南陽,東略信陽。七月,張獻忠又陷鄖西,至信陽。楊嗣昌死後,崇禎帝命陝西三邊總督丁啟睿接任督師,繼續圍剿義軍。原在一邊觀望不戰的左良玉,亦率部前來追擊張獻忠。秋八月張獻忠在信陽為左良玉部所敗,帶傷出商城,走英山方向,又被王允成擊敗,“眾道散且盡,從騎止數十”。在此之前,羅汝才與張獻忠不合,投奔了闖王李自成。信陽敗後,張獻忠也往投李自成。李自成“以部曲遇之,不從,自成欲殺之”,為羅汝才阻止。羅汝才私贈五百騎,張獻忠自河南經安徽東下。這時,李自成的義軍正圍攻開封。督師丁啟睿和左良玉等官軍主力,都北上救援開封。年底,張獻忠乘間陷亳州,入英、霍山區,與“革左五營”相見,“革左五營”是由老回回馬守應、革裏眼賀一龍、左金王賀錦、爭世王劉希堯、亂地王藺養成五營聯軍組成的。從此,義軍的聲勢又複振。
崇禎十五年(1642年)二月,張獻忠率彙合後的義軍,攻陷舒城、六安,進克廬州,殺知府鄭履祥。又連下無為、廬江,並在巢湖訓練水軍。接著又打敗了總兵官黃得功、劉良佐的官軍。張獻忠義軍的勝利,使“江南大震”。鳳陽總督高鬥光、安慶巡撫鄭二陽被逮治,起用馬士英代之。十月,張獻忠義軍被官軍劉良佐部擊敗,張獻忠率部西走鄲水。“革左五營”北投李自成。左良玉為避李自成,盡撤湖廣兵東下。張獻忠乘機攻占黃梅。