唐建中四年(783年)十月,泾原将士在京城叛乱(史称“泾原兵变”或“泾师之变”),德宗避难奉天(今陕西乾县)。朱泚僭号称帝后,李怀光奉旨率军救驾,在奉天解围中发挥过重要作用。当朱泚还走长安后,德宗却听信宰相卢杞、度支使赵赞、神策军使白志贞等奷佞的谗言,命怀光乘胜追击朱泚,收复长安,不许率部到奉天见天子。李怀光屯军咸阳,一再揭露卢杞等人罪恶,直到把他们贬为远州司马,又上疏杀掉德宗信任的宦官翟文秀。但他仍不进军配合李晟作战,准备谋反。当初在解奉天之围后,德宗派人邀请吐蕃出兵帮助官军收复京城,吐蕃相尚结赞说没有主兵大臣李怀光署名制书不出兵。德宗派翰林学士陆贽晓谕李怀光,他仍固执不署敕,尚结赞也不进军。
兴元元年二月,德宗加封李怀光太尉,增食实封,兼赐铁券,派遣神策右兵马使李升等喻旨。李怀光愤怒地投铁券于地,说朝廷这样做是逼他造反。当时,李怀光的部将韩游瑰还在奉天执掌兵权。李怀光写信约他同谋反唐。韩游瑰却向朝廷密告此事。第二天,李怀光去信催促,韩游瑰再次密告德宗。过几天,李怀光又派人同韩游瑰商谈,被韩拘捕。李怀光公开宣言:我今与朱泚联合反唐,车驾应当远避。
面对关中这两个反唐对手,唐德宗只得转到梁州(治南郑,今陕西汉中市)避难,以躲其锋。这时,李晟已移军东渭桥,准备进攻被朱泚占据的长安城。李怀光再次袭击鄜坊节度使李建徽、神策行营节度使杨惠元等军,把咸阳主力移向好畤(今陕西麟游县武亭川上游),其部属往常同官兵闹磨擦。
朱泚探知李怀光在后方扰乱官军时,⾼兴得要给李怀光加官进爵。李怀光向岐、邠二州掠夺,二十曰后,又掠夺泾阳、三原、富平等地,从同州(治冯翊,今陕西大荔县)开往河中(治河东,今山西永济县西)。李怀光大将孟涉、殷威勇从三原带数千人投奔李晟。韩游瑰杀李怀光留后张昕,率邠州(治新平,今陕西彬县)归顺唐廷。戴休颜在奉天宣示军中:李怀光已反叛朝廷,于是上城拒守。德宗决定授予韩游瑰,戴休颜以节度使职务,下诏数落李怀光罪恶,解除李怀光副元帅、太尉、中书令、河中尹兼朔方诸道节度、观察等使之职,他所管兵马委派该军自举一名功⾼望崇者统帅。是年四月,李怀光到达河中后,又攻占同、绛等州,按兵不动,观察长安城形势发展.形成一支与唐廷相对抗的一支军事势力。
德宗命待中浑瑊为河中节度副元帅,领兵讨伐怀光。浑瑊重新占领同州(治冯翊,今陕西大荔)后,几次与李怀光交锋都为其所败,不能前进。当时,许多朝臣建议赦怀光罪,德宗不许。又任命河东节度使马燧为副元帅,与浑瑊及镇国节度骆元光,邠宁节度韩游瓌、鄜坊节度使唐朝臣等会兵同讨怀光。为了分化这支数万人的河中军,在官军颁发冬衣时,朝廷特意指示,朔方及诸军在怀光所属的士兵,冬衣及赏钱皆当另外贮放,待道路稍通,及时发放。马燧率步骑3万人攻拔绛州(治正平,今山西新绛),随后又分兵攻取闻喜、万泉、虞乡、永乐、猗氏地,在陶城(今山西永济西北)斩首万余级,与浑瑊军相会合,兵逼河中李怀光大本营。贞元元年四月,马燧、浑瑊在长舂宮(今山西永济境)南大破李怀光军,并掘堑壕围宮城,怀光部将相继降唐,朝廷又任命马燧、浑瑊为招抚使。这时,邻州(治新平,今陕西彬县)韩游瓌率兵6000请示浑瑊,共同攻打朝邑(今陕西大荔县东南朝邑镇)。李怀光部将阎晏欲出战,其部下却因邻军是自己的亲人,不愿白刃相向,阎晏立即引兵退去。李怀光看到众心不从,便诈称要归顺唐廷,乘机聚集掠夺的财物,准备车马,扬言说待道路畅通后向朝廷进贡,这样延迟近一个月。当时,连年旱蝗灾害,官兵的物资粮食匮竭,又有些人建议赦免李怀光。李晟却陈述五点理由力主平叛到底。他还请求朝廷发兵2万,自备资粮,独讨怀光。七月初一,马燧从前线回京建议除恶务尽,拨给官兵一月粮,必定歼敌。得到德宗批准。
八月初二,德宗罢免子一切与打仗无关的费用,全力支持平叛。马燧回到前线行营后,当即与诸将商议攻打长舂宮,并亲自深入宮城下,向守将徐庭光喊话策反,并要求他们坚守不要出击。初十,马燧、浑碱、韩游瓌三支主力近逼河中焦篱堡(位于河中府河西县西),守将尉硅率700人投降。这天夜晚,李怀光举火联络,诸营不予响应。马燧亲自到长舂宮下招降守将徐庭光。马燧率诸军到河西(今陕西合阳东),河中军士惊慌,怀光无法控制局势,自缢⾝亡。朔方将牛名俊砍断李怀光首级出城投降。这时河中兵还有1。6万人,马燧斩杀了阎晏等七名首要犯,其余皆不问罪,叛乱被平定。