Bien qu'au début de la guerre de réforme, les conservateurs eurent l'avantage grâce à l'appui de la majorité de l'armée, la tendance s'est petit à petit renversée en faveur des libéraux. Après leur prise de Guadalajara le [2],[3], ces derniers ont pris l'initiative dans le conflit et gagnent du terrain en se rapprochant de la capitale Mexico. Les conservateurs, qui tiennent la ville, décident alors de jouer leur dernière carte en envoyant leur meilleur général, Miguel Miramón, à la tête de huit mille hommes, accompagné d'officiers de qualité comme Leonardo Márquez Araujo, Francisco A. Vélez et Marcelino Cobos.
L'armée libérale se présente sous les ordres du général Jesús González Ortega(es) accompagné des généraux Ignacio Zaragoza, Miguel Negrete, Leandro Valle, Nicolás Régules et Francisco Alatorre à la tête d'une force de 11 000 hommes. Cette armée est composée de guérilleros républicains qui, bien que n'ayant pas reçu une éducation militaire, possèdent l'expérience du combat après trois ans de guerre civile.
Les deux armées se rencontrent à Calpulalpan le . Après des négociations infructueuses, les deux camps se préparent à livrer bataille[1].
Bataille
Le , à 8 h du matin, Miramón lance son attaque. Il veut profiter de la supériorité de son artillerie pour enfoncer l'aile gauche de l'ennemi. La contre-attaque libérale se produit deux heures plus tard : Zaragoza profite de la supériorité de ses forces pour s'en prendre à l'aile droite des conservateurs tandis que Régules attaque le centre. Pendant ce temps-là, les généraux González Ortega, Leandro Valle et Alatorre opèrent avec succès un mouvement d'encerclement de l'armée conservatrice. Cette dernière est prise au piège et détruite. Le général González Ortega supervise lui-même la fin de la bataille.
Miguel Miramón parvient à fuir et à retourner à Mexico où il rassemble 1 500 hommes à la hâte mais ceux-ci désertent rapidement. Conscient que sa cause est perdue, il se rend à Veracruz et embarque pour La Havane et de là, vers la France[1]. Il ne sera de retour que des années plus tard avec l'empereur Maximilien.
Conséquences
Cette bataille marque la fin de l'armée conservatrice[4]. Le , l'armée libérale entre triomphalement dans Mexico. Le , l'arrivée de Benito Juárez marque la fin officielle des hostilités[1] bien que quelques forces résiduelles conservatrices, comme celle de Tomás Mejía[1], continuent le combat[5].