К началу наступления войск 1-го Украинского фронта противнику удалось подготовить три полосы обороны глубиной 40–50 км. Первая полоса, глубиной 4–6 км, состояла из трех-четырех сплошных траншей, соединенных ходами сообщения. Вторая полоса была создана в 8–10 км от переднего края главной полосы. По берегам Западного Буга и Гнилой Липы в 30 км от переднего края строилась третья полоса обороны. Города Львов, Станислав и другие крупные населенные пункты были превращены в сильные узлы сопротивления. Почти все пехотные дивизии противник сосредоточил в первой и второй полосах обороны, а танковые дивизии располагались в 10–20 км от переднего края.
Ближайшей задачей войск 1-го Украинского фронта было разгромить противника на рава-русском и львовском направлениях и выйти на рубеж Грубешув, Томашув, Яворов, Николаев, Галич. После прорыва вражеской обороны на львовском направлении намечалось частью сил левого крыла фронта нанести удар на Станислав.
Перед наступлением в составе 1-го Украинского фронта имелось 74 стрелковые и 6 кавалерийских дивизий, 10 танковых и механизированных корпусов, 13 900 орудий и минометов калибра 76 мм и выше, 1614 танков и самоходно-артиллерийских установок. В состав фронта входил также 1-й чехословацкий армейский корпус[9]. Всего в войсках фронта было 843 тыс. человек [10]. С воздуха войска поддерживала 2-я воздушная армия генерал-полковника авиации С. А. Красовского.
Наступление началось утром 13 июля. Войска 3-й гвардейской армии, которой командовал генерал-полковник В. Н. Гордов, и 13-й армии под командованием генерал-полковника Н. П. Пухова перешли в наступление на рава-русском направлении. На львовском направлении наступление началось 14 июля силами 60-й армии, которой командовал генерал-полковник П. А. Курочкин, и 38-й армии генерал-полковника К. С. Москаленко.
На рава-русском направлении после ожесточенных боев советские войска к исходу следующего дня продвинулись на 15–20 км. Более медленно развивалось наступление на львовском направлении, где противник заблаговременно укрепил оборону. В район прорыва враг подтянул 1-ю и 8-ю танковые дивизии. К исходу дня 15 июля советские войска с упорными боями продвинулись на 10–15 км. Но в полосе 38-й армии враг в этот день нанес сильный контрудар танковой группировкой и потеснил паши войска.
Для того чтобы завершить прорыв вражеской обороны, было решено ввести в действие подвижные войска. 16 июля на рава-русском направлении перешли в наступление конно-механизированная группа генерал-лейтенанта В. К. Баранова, а 17 июля — 1-я гвардейская танковая армия генерал-полковника танковых войск М. Е. Катукова.
Ввод танковых войск на львовском направлении осуществлялся в трудных условиях, через узкий колтувский коридор шириной 4–6 км. С утра 16 июля через этот коридор в сражение была введена 3-я гвардейская танковая армия генерал-полковника П. С. Рыбалко, а на следующее утро и 4-я танковая армия генерал-полковника Д. Д. Лелюшенко.
Чтобы расширить прорыв в сторону левого фланга, утром 16 июля в общем направлении на Бережаны перешла в наступление ударная группировка 1-й гвардейской армии. В то же время для прочного обеспечения флангов в районе Колтува были сосредоточены дополнительные силы артиллерии, танков и инженерных войск.
Введенные в прорыв подвижные войска развернули наступление на города Рава-Русская и Львов. К исходу 18 июля войска 1-го Украинского фронта прорвали оборону противника на участке 200 км, продвинулись на глубину 50–80 км и в районе Броды окружили восемь вражеских дивизий. Гитлеровское командование прилагало отчаянные усилия, чтобы освободить свои окруженные войска и удержать Львов, но мощными ударами с разных направлений окруженная группировка была расчленена на части и 22 июля полностью ликвидирована.
Попытки 3-й гвардейской и 4-й танковых армий овладеть Львовом с ходу успеха не имели, так как противник дополнительно перебросил сюда крупные силы. Тогда было решено освободить Львов путем глубокого охвата.
22 июля 4-я танковая армия достигла южной окраины Львова и завязала уличные бои. С востока наносила удар 60-я армия. К 24 июля 3-я гвардейская танковая армия вышла в район Яворова. 27 июля в результате совместных ударов с разных направлений Львов был освобожден от немецко-фашистских захватчиков. В тот же день войска 1-й гвардейской армии освободили Станислав.
Наступление советских войск продолжалось. 29 июля передовые соединения 3-й гвардейской и 13-й армий, 1-й и 3-й гвардейских танковых армий вышли к Висле. 350-я стрелковая дивизия генерал-майора Г. И. Вехина с ходу форсировала реку и захватила плацдарм на западном ее берегу в районе севернее Баранува. Отражая ожесточенный натиск врага, дивизия обеспечила наращивание сил на плацдарме 13-й и 1-й гвардейской танковой армий.