Luego Lee pasó a la ofensiva, llevando a cabo una serie de batallas que duraron siete días (del 25 de junio al 1 de julio) y empujó a McClellan de vuelta a una posición segura pero no amenazante en el río James. McClellan fue el primero en atacar el 25 de junio en la batalla de Oak Grove, durante la cual dos divisiones de la Unión intentaron ocupar el terreno en el que McClellan planeaba construir baterías de asedio. McClellan planeaba atacar de nuevo al día siguiente, pero estaba distraído por el ataque de la Confederación en Mechanicsville o Beaver Dam Creek, el 26 de junio. Lee observó que McClellan había colocado a su ejército a horcajadas sobre el río Chickahominy y que podría ser derrotado en detalle. Planeó que la división de A.P. Hill se manifestara en el frente de Porter mientras Jackson marchaba detrás de las posiciones de la Unión y atacaba por la retaguardia. Sin embargo, Jackson llegó tarde a su posición asignada, mientras que Hill comenzó su ataque sin esperar a Jackson y fue repelido con muchas bajas. A pesar de ser una victoria táctica de la Unión, McClellan todavía ordenó a Porter que se retirara hacia el sur hacia el resto del ejército de la Unión, temiendo que Porter estuviera rodeado por fuerzas confederadas muy superiores por la mañana. Porter estableció líneas defensivas cerca de Gaines's Mill, cubriendo los puentes sobre el Chickahominy.