李自成的先头部队比清军早到山海关,吴三桂率军开关迎战,双方互有杀伤。当农民军大部队到达时,吴三桂龟缩在城内,不敢出战。李自成指挥大军在关前安营扎寨,并派唐通(原明降将)等率另一支部队绕到关外,截断吴三桂与关外的通道,形成对山海关包围之势。
多尔衮也率清军昼夜兼程,赶到关外十里的沙河停下来,以观动静。吴三桂派人到清营报告,说有支农民军在一片石附近扎营,威胁山海关。多尔衮传令清军出击,将唐通部队击溃。吴三桂亲率五百骑兵出关,前往清营。他见到多尔衮,拜倒称臣,并剃发易服,表示归顺。接着,吴三桂回到山海关,大开城门,迎接多尔衮大军入城。
四月二十一日,在山海关下摆开了决战阵势:李自成大军布列于关内一侧,吴三桂和清军布列于城内和关外一侧。多尔衮看到农民军气势雄壮,对此战胜负并无十分把握,他对吴三桂说:“约敌兵明天决战。你应率所部打头阵,我从后接应,乘其不备,突然奔袭,必致敌于绝境。”并令吴三桂所部在肩上系上一块白布,以示与农民军的区别。
四月二十二日,决战开始了。李自成带领随从登上西山冈,在一座庙前指挥。多尔衮也带一批将领立马高处,观察农民军阵势,他对吴三桂说:“你部分列右翼,对准它的中坚奋力冲击,那时候,我会接应你的。”进攻令下达后,吴三桂率军向农民军猛攻。农民军见吴军冲来,便张开两翼迅速合围,把吴三桂部队围在当中。突然,天色变暗,狂风大作,飞沙走石,农民军顶风冲杀,吴三桂挥兵拼死抵挡。大战从上午一直打到中午,吴军渐渐招架不住。
隐蔽在阵后观战的多尔衮见时机已到,下令清军出击。蓄锐以待的数万清军从吴三桂军队右侧突然出现,飞矢如雨,锐不可当。农民军猝不及防,被冲开了一道缺口。农民军战士激战了一个上午,已经,抵不住这凶猛的攻势,阵势混乱。李自成在山岗上看到这种情况,忙问:“那是谁家的兵?”旁边人回答:“这不是吴兵,必是东兵(清兵)来了。”李自成想重新组织兵马,稳住阵角,但已来不及了。农民军将领刘宗敏也被乱箭射中,只得且战且退。李自成沉吟片刻,便策马下山岗,指挥农民军撤离山海关而去。清军一直追了四十里才收兵。