Контрнаступление советских войск Юго-Западного фронта назначалось на 26 мая 1920 года. Однако в этот день перешли в наступление фактически только 14-я армия и Фастовская группа. 12-я армия к этому сроку еще не закончила перегруппировку своих войск и подготовку переправы через Днепр. Попытки небольших групп этой армии переправиться 27 мая через Днепр в районе Страхолесье (севернее Киева) оказались безуспешными. Поляки с противоположного берега реки и с моторных лодок встретили группы советских бойцов сильным ружейно-пулеметным огнем. Подразделения 12-й армии вынуждены были прекратить переправу через Днепр и возвратиться в исходное положение. В последующие дни войска 12-й армии начали фронтальное наступление на Киев. Однако противник оказал ожесточенное сопротивление. Атаки советских войск оказались безуспешными. Боевые действия на участке Фастовской группы и 14-й армии с первого же дня приняли ожесточенный характер. Части Фастовской группы, стремительно атаковав противника, прорвали фронт в районе восточнее Белой Церкви. Однако поляки, собрав значительные силы, в ночь на 30 мая предприняли контратаку. Рассредоточенность войск Фастовской группы на широком фронте и отсутствие резервов привели к тому, что она не выдержала натиска и ко 2 июня была оттеснена на исходные позиции. Не добилась существенных успехов в эти дни и 14-я армия.
26 мая начала выдвигаться на исходное положение 1-я Конная армия. На своем пути ей пришлось вести бои с повстанческими отрядами Куровского. Так, 28 мая 4-я кавалерийская дивизия в районе Пятигор разгромила Запорожский повстанческий полк. Были захвачены пленные, пулеметы и большое количество патронов. В этот же день развернулись бои большевистских конников с польскими войсками. Наступление 1-й Конной армии велось на фронте протяженностью 40 км. 29 мая 4-я кавалерийская дивизия атаковала конницу поляков, принудив ее к отходу. Одновременно она выбила польские пехотные части из Ново-Фастова.
Бои продолжались и становились более упорными и ожесточенными. 30 мая поляки ввели в сражение свежие части. Им удалось выбить большевиков из Ново-Фастова и Липовца. Последующие попытки 1-й Конной армии прорвать оборону поляков не увенчались успехом. 31 мая на сторону поляков перешло 3 эскадрона 81-го полка 14-й кавдивизии, состоявших в основном из донских казаков бывшей деникинской армии.
В начале лета 1920 года Реввоенсовет Юго-Западного фронта приказал командующим армиями отказаться от лобовых атак вражеских укреплений, тщательно готовить каждую наступательную операцию, на важнейших направлениях действовать ударными группами. Еще 31 мая РВС Юго-Западного фронта дал указание командованию 12-й армии прекратить фронтальные атаки Киева, оставить против киевского плацдарма противника только 58-ю стрелковую дивизию. Все остальные силы армии свести в ударную группу для форсирования реки Днепр и прорыва фронта севернее Киева.
1-я Конная армия была сосредоточена на участке в 10 км северо-восточнее Ново-Фастова. К вечеру 3 июня 1-я Конная армия заняла исходный рубеж для наступления. В эти дни стояла дождливая погода. Польское командование рассчитывало, что плохая погода помешает советским войскам начать военные действия. Более того, оно было уверено в том, что советская кавалерия понесла значительные потери, и само готовило наступление с целью окончательного разгрома армии Буденного. На рассвете 5 июня 1-я Конная армия перешла в наступление. Дождь и густой туман позволили большевикам скрытно выйти на рубеж атаки и перейти в стремительное наступление. Когда же польские войска заметили советских бойцов, было уже поздно. Через два часа после начала атаки польский фронт был прорван в районе Сквира—Самгородок.
Наступление советских войск было настолько стремительным, что к вечеру того же дня 1-я Конная армия прорвалась севернее и восточнее Казатина, разрушив в ряде мест железную дорогу Фастов—Казатин— Липовец, и вышла в тыл 3-й польской армии. В 18 часов 7 июня 4-я кавалерийская дивизия овладела Житомиром, уничтожив польский гарнизон и освободив из плена 7 тысяч красноармейцев, которые сразу же встали в строй. В этот же день 11 — я кавалерийская дивизия заняла Бердичев. Глубина прорыва 1-й Конной армии в тыл польских войск составила 120–140 км. Польский фронт на Украине оказался расколотым на две части. Потеряв управление своими войсками, польский штаб во главе с Пилсудским, находившийся в Житомире, в спешке передислоцировался в Новоград-Волынский.
Выход частей 1-й Конной армии в глубокий тыл 3-й польской армии и успешное продвижение ударной группы 12-й армии создали благоприятные условия для полного окружения польских войск в районе Киева. Реввоенсовет Юго-Западного фронта 8 июня потребовал от 12-й армии занять район станций Бородянка и Ирша, с тем чтобы перерезать последнюю магистраль Киев— Коростень, по которой поляки еще имели возможность отвести свои войска из района Киева.