Противник, стремясь задержать продвижение войск 1-го Украинского фронта, создал развитую систему обороны, состоявшую из трех полос. Первая полоса включала непрерывную систему траншей, доходивших на некоторых участках до 3–4 линий. На ряде участков впереди первой траншеи в 50—200 м располагались позиции боевого охранения, имевшие окопы полного профиля с ходами сообщения к основной траншее. Траншея первой линии была связана ходами сообщения со второй линией. Вторая линия траншей проходила на удалении от первой на 200–300 м, а третья линия – в 1,5–2 км. Вторая полоса обороны было оборудована на глубине 6—10 км от переднего края. Она представляла собой сплошную траншею полного профиля. Кроме того, имелись сведения о наличии второго тылового оборонительного рубежа в 30–40 км от переднего края по линии Повоч, Сасов, хутор Дембица, Золочев и третьего рубежа – по р. Западный Буг, Красное, р. Пельтев.
Несмотря на постоянное изучение группировки противника, командованию фронта к началу наступления не удалось в полной мере вскрыть систему огня и дислокацию его резервов, в том числе танковых дивизий на львовском направлении.
Вечером 12 июля на рава-русском направлении была проведена разведка боем. Она установила, что противник начал отвод своих войск, оставив на переднем крае боевое охранение. В связи с этим маршал Конев принял решение немедленно перейти в наступление передовыми батальонами дивизий, находившихся на направлении главного удара 3-й гвардейской и 13-й армий. Вскоре они преодолели главную полосу обороны, продвинувшись на 8—12 км.
На львовском направлении прорыв проходил в более напряженной обстановке. 14 июля после полуторачасовой артиллерийской подготовки и массированных ударов авиации перешли в наступление главные силы 60-й и 38-й армий. Но к исходу дня они продвинулись лишь на 3–8 км, непрерывно отражая удары введенных противником в сражение оперативных резервов в составе двух танковых дивизий. Для оказания содействия войскам 60-й армии генерал Рыбалко решил ввести в сражение две бригады корпусов первого эшелона.
Утром 15 июля была проведена артиллерийская подготовка. Одновременно авиация 2-й воздушной армии нанесла удар с воздуха по противнику. В результате его танковые дивизии понесли значительные потери, а управление войсками было дезорганизовано. В 8 часов 30 минут 69-я механизированная бригада 9-го механизированного корпуса совместно с частями 15-го и 28-го стрелковых корпусов атаковала противника в районе Перепельники. 56-я гвардейская танковая бригада 7-го гвардейского танкового корпуса совместно с частями 28-го стрелкового корпуса вступила в бой в районе Гукаловце. К исходу дня 15 июля войска 60-й и 3-й гвардейской танковой армий прорвали оборону противника на глубину до 18 км, образовав так называемый колтовский (колтувский) коридор шириной 4–6 км. Эта узкая полоса местности между Колтовом и Тросцянец Малы, в междуречье Западного Буга и Золочувки, вытянутая на 20 км в северо-западном направлении, была единственной, с большим трудом пробитой брешью в обороне противника на львовском направлении. С обеих сторон она простреливалась артиллерийским, минометным и даже пулеметным огнем. Кроме того, противник пытался ударами по сходящимся направлениям перерезать колтовский коридор.
Перед маршалом Коневым стояла сложная проблема: вводить танковую армию через узкий коридор или продолжать борьбу по его расширению. Последнее приводило к потере драгоценного времени – вражеское командование могло подтянуть к этому участку дополнительные резервы и сорвать наступление войск фронта. После всесторонней оценки обстановки командующий фронтом решил ввести в сражение главные силы 3-й гвардейской танковой армии в полосе обозначившегося успеха. С утра 16 июля вслед за передовыми отрядами они начали выдвижение по одному маршруту. Для обеспечения их выдвижения было выделено шесть авиационных корпусов.
К утру 17 июля войска 3-й гвардейской танковой армии вышли к р. Злочувка и переправились на ее западный берег. Не встречая в дальнейшем организованного сопротивления противника, передовой отряд 7-го гвардейского танкового корпуса занял Куткож, перерезав железную дорогу Львов – Броды. Передовой отряд 9-го механизированного корпуса овладел Красным. Утром следующего дня началась переправа через р. Пельтев. 71-я механизированная бригада 9-го механизированного корпуса после упорного боя овладела Буском. Ее передовой отряд, продвигаясь в северо-восточном направлении, занял Деревляны, куда к исходу дня подошли части конномеханизированной группы генерала Баранова, замкнув кольцо окружения вокруг бродской группировки противника. 19 июля стрелковые части 60-й армии взяли Колтув, ликвидировав попытки противника закрыть ворота прорыва в горловине коридора.