唐建中四年(783年)十月,涇原將士在京城叛亂(史稱「涇原兵變」或「涇師之變」),德宗避難奉天(今陝西乾縣)。朱泚僭號稱帝后,李懷光奉旨率軍救駕,在奉天解圍中發揮過重要作用。當朱泚還走長安後,德宗卻聽信宰相盧杞、度支使趙贊、神策軍使白志貞等奸佞的讒言,命懷光乘勝追擊朱泚,收復長安,不許率部到奉天見天子。李懷光屯軍咸陽,一再揭露盧杞等人罪惡,直到把他們貶為遠州司馬,又上疏殺掉德宗信任的宦官翟文秀。但他仍不進軍配合李晟作戰,準備謀反。當初在解奉天之圍後,德宗派人邀請吐蕃出兵幫助官軍收復京城,吐蕃相尚結贊說沒有主兵大臣李懷光署名制書不出兵。德宗派翰林學士陸贄曉諭李懷光,他仍固執不署敕,尚結贊也不進軍。
興元元年二月,德宗加封李懷光太尉,增食實封,兼賜鐵券,派遣神策右兵馬使李升等喻旨。李懷光憤怒地投鐵券於地,說朝廷這樣做是逼他造反。當時,李懷光的部將韓游瑰還在奉天執掌兵權。李懷光寫信約他同謀反唐。韓游瑰卻向朝廷密告此事。第二天,李懷光去信催促,韓游瑰再次密告德宗。過幾天,李懷光又派人同韓游瑰商談,被韓拘捕。李懷光公開宣言:我今與朱泚聯合反唐,車駕應當遠避。
面對關中這兩個反唐對手,唐德宗只得轉到梁州(治南鄭,今陝西漢中市)避難,以躲其鋒。這時,李晟已移軍東渭橋,準備進攻被朱泚佔據的長安城。李懷光再次襲擊鄜坊節度使李建徽、神策行營節度使楊惠元等軍,把咸陽主力移向好畤(今陝西麟游縣武亭川上游),其部屬往常同官兵鬧磨擦。
朱泚探知李懷光在後方擾亂官軍時,高興得要給李懷光加官進爵。李懷光向岐、邠二州掠奪,二十日後,又掠奪涇陽、三原、富平等地,從同州(治馮翊,今陝西大荔縣)開往河中(治河東,今山西永濟縣西)。李懷光大將孟涉、殷威勇從三原帶數千人投奔李晟。韓游瑰殺李懷光留後張昕,率邠州(治新平,今陝西彬縣)歸順唐廷。戴休顏在奉天宣示軍中:李懷光已反叛朝廷,於是上城拒守。德宗決定授予韓游瑰,戴休顏以節度使職務,下詔數落李懷光罪惡,解除李懷光副元帥、太尉、中書令、河中尹兼朔方諸道節度、觀察等使之職,他所管兵馬委派該軍自舉一名功高望崇者統帥。是年四月,李懷光到達河中後,又攻佔同、絳等州,按兵不動,觀察長安城形勢發展.形成一支與唐廷相對抗的一支軍事勢力。
德宗命待中渾瑊為河中節度副元帥,領兵討伐懷光。渾瑊重新佔領同州(治馮翊,今陝西大荔)後,幾次與李懷光交鋒都為其所敗,不能前進。當時,許多朝臣建議赦懷光罪,德宗不許。又任命河東節度使馬燧為副元帥,與渾瑊及鎮國節度駱元光,邠寧節度韓游瑰、鄜坊節度使唐朝臣等會兵同討懷光。為了分化這支數萬人的河中軍,在官軍頒發冬衣時,朝廷特意指示,朔方及諸軍在懷光所屬的士兵,冬衣及賞錢皆當另外貯放,待道路稍通,及時發放。馬燧率步騎3萬人攻拔絳州(治正平,今山西新絳),隨後又分兵攻取聞喜、萬泉、虞鄉、永樂、猗氏地,在陶城(今山西永濟西北)斬首萬餘級,與渾瑊軍相會合,兵逼河中李懷光大本營。貞元元年四月,馬燧、渾瑊在長春宮(今山西永濟境)南大破李懷光軍,並掘塹壕圍宮城,懷光部將相繼降唐,朝廷又任命馬燧、渾瑊為招撫使。這時,鄰州(治新平,今陝西彬縣)韓游瑰率兵6000請示渾瑊,共同攻打朝邑(今陝西大荔縣東南朝邑鎮)。李懷光部將閻晏欲出戰,其部下卻因鄰軍是自己的親人,不願白刃相向,閻晏立即引兵退去。李懷光看到眾心不從,便詐稱要歸順唐廷,乘機聚集掠奪的財物,準備車馬,揚言說待道路暢通後向朝廷進貢,這樣延遲近一個月。當時,連年旱蝗災害,官兵的物資糧食匱竭,又有些人建議赦免李懷光。李晟卻陳述五點理由力主平叛到底。他還請求朝廷發兵2萬,自備資糧,獨討懷光。七月初一,馬燧從前線回京建議除惡務盡,撥給官兵一月糧,必定殲敵。得到德宗批准。
八月初二,德宗罷免子一切與打仗無關的費用,全力平叛。馬燧回到前線行營後,當即與諸將商議攻打長春宮,並親自深入宮城下,向守將徐庭光喊話策反,並要求他們堅守不要出擊。初十,馬燧、渾鹼、韓游瑰三支主力近逼河中焦籬堡(位於河中府河西縣西),守將尉硅率700人投降。這天夜晚,李懷光舉火聯絡,諸營不予響應。馬燧親自到長春宮下招降守將徐庭光。馬燧率諸軍到河西(今陝西合陽東),河中軍士驚慌,懷光無法控制局勢,自縊身亡。朔方將牛名俊砍斷李懷光首級出城投降。這時河中兵還有1.6萬人,馬燧斬殺了閻晏等七名首要犯,其餘皆不問罪,叛亂被平定。