Для решения поставленной задачи полковник П.П. Опякин привлек два стрелковых и один артиллерийский полки своей дивизии. Вдоль шоссе Ивангород – Краснополка должен был наступать 197-й полк майора И.Л. Хмельницкого. Справа его поддерживал 1-й полк майора Р.Ф. Жевнирова, которому надлежало нанести удар по северо-восточной части села. Артиллерийская поддержка осуществлялась силами 71-го гаубичного полка и противотанкового дивизиона.
Артиллерийская подготовка началась около 7.00 утра. Основной обстрел пришелся по позициям 2-го батальона, но поскольку советские артиллеристы стреляли, в основном, по площадям, их огонь не нанес противнику существенного ущерба. Вслед за разрывами снарядов в атаку поднялась пехота. Укрываясь в пшеничных полях, в посевах кукурузы и подсолнечника, бойцы 197-го полка приблизились вплотную к позициям оборонявшихся немцев. Особенно сильный удар пришелся по 5-й роте 2-го батальона, красноармейцам удалось прорваться к командному пункту командира роты, дело дошло до рукопашных схваток.
Почти одновременно началась атака на позиции 1-го батальона. Около 8.00 переброшенные из Скарженовки на автомашинах красноармейцы без артиллерийской поддержки начали наступление. Сравнительно быстро им удалось достичь восточной окраины села, и вскоре в обороне немцев образовался разрыв, локтевая связь между 1-м и 2-м батальонами была утеряна, создалась угроза охвата второго батальона с юга. Уже в первой половине дня немцы бросили в бой полковой резерв – 3-ю роту, а следом за ней – саперный взвод.
После перегруппировки немцы предприняли ряд контратак. Преодолев ожесточенное сопротивление, 1-й батальон вытеснил части 99-й дивизии со всей южной окраины села. В боях немцы понесли существенные потери, были выбиты из строя все офицеры и большинство командиров взводов 2-й роты. Тогда майор И.Л. Хмельницкий решил предпринять обходной маневр и атаковать южную окраину с западной стороны, полагая, что обороны здесь нет или она существенно слабее, чем в других секторах. Около 12.00 для выполнения этой задачи была направлена рота старшего лейтенанта И.Ф. Кужима. Красноармейцы успешно теснили немцев, выдавливая их с южной окраины села. В этих боях рота И.Ф. Кужима понесла большие потери, а сам лейтенант погиб[49].
К полудню командиры немецких батальонов сообщили в полк, что основная часть занимаемых позиций удержана, несмотря на многочисленные атаки советских войск. Но все выражали обеспокоенность большими потерями и нехваткой боеприпасов, особенно для пулеметов. 421-й полк оказался в критической ситуации, продолжение атак могло привести к его уничтожению. Оставалось два выхода: или держаться на позициях до последнего, или отойти на западную окраину.
Исходя из сложившейся обстановки, в 14.30 оберст-лейтенант Райнгард отдал приказ о постепенном отводе частей: 2-му батальону по обеим сторонам дороги, 3-му – севернее и 1-му южнее ее. 2-й батальон при отходе должен попытаться задержаться на восточной окраине, чтобы дать остальным возможность отойти беспрепятственно. В 18.00 немцы получили пополнение боеприпасами для пулеметов и винтовок и теперь были в готовности отражать новые атаки, которые возобновились около 19.00.
К концу дня чаша весов все-таки склонилась в пользу немцев, 421-й полк сумел выстоять и сохранить боеспособность. Вскоре после 19.00 прибыли батареи 125-го артиллерийского полка и сразу же вступили в бой, немного позже с позиций у с. Мытков открыли огонь 100-мм орудия 56-го полка. А к 20.00 подоспел 1-й батальон 420-го полка, вслед за ним 3-й батальон 419-го. Это позволило 421-му полку около 21.00 войти в село и занять все утраченные с утра позиции почти без противодействия со стороны частей 99-й дивизии. В 22.00 оберст-лейтенант Райнгард сообщил в штаб дивизии, что Краснополка находится полностью в немецких руках. Бой за Краснополку стоил 421-му полку самых больших потерь за всю его предшествующую историю: он потерял 115 человек убитыми и 235 ранеными, 4 пропали без вести[50]. В плен взято 280 красноармейцев[51].
Что же касается советской стороны, то к исходу дня стало ясно, что полностью выбить противника из села не удастся, полковник П.П. Опякин отдал приказ с наступлением темноты вывести части из Краснополки, за ночь оторваться от противника и к рассвету 29 июля занять оборону в районе города Умань. Для его дивизии бой 28 июля закончился неудачей, поставленная задача выполнена полностью не была, а соединение понесло очень большие потери.
Одновременно со сражением за Краснополку развернулся бой за Гранов. Против этого села с немецкой стороны действовали 1-й и 2-й батальоны 419-го полка, а также 3-я и 5-я роты 420-го. Вскоре после полудня батальоны 125-й дивизии атаковали южную часть села, тогда как по его северным окраинам нанесли удар подошедшие части 295-й дивизии. В итоге Гранов был взят с незначительными для немцев потерями.