В качестве подвижной группы фронты имели: 1-й Белорусский фронт – 1-ю и 2-ю гвардейские танковые армии, 1-й Украинский фронт – 3-ю и 4-ю гвардейские танковые армии, 2-й Белорусский фронт – три танковых корпуса, один механизированный и один кавалерийский. Танковые армии намечалось ввести в прорыв в первый день операции после захвата стрелковыми подразделениями первой полосы обороны на 1-м Белорусском фронте и на второй день с рубежа р. Шпрее на 1-м Украинском фронте. Затем они должны были действовать в самом городе. Двухэшелонное построение войск давало возможность наращивать усилия из глубины. На участке 1 – го Белорусского фронта было создано превосходство над противником более чем в три раза, на участке 1-го Украинского – в 8—10 раз. Тщательно было спланировано применение артиллерийской подготовки – двойной огневой вал, одинарный огневой вал, последовательное сосредоточение огня. Четкие задачи получила и авиация. В частности, она должна была не допустить подхода к противнику резервов со стороны Берлина и Дрездена.
Все три фронта к началу операции насчитывали 2,5 млн человек, 41 600 орудий и минометов, 7500 боевых самолетов, 6250 танков. Столь большое количество сил и средств не применялось еще ни в одной операции.
В 5 часов 16 апреля 1945 г., еще затемно, началась артиллерийская и авиационная подготовка, а спустя 20 минут – общее наступление. С началом наступления были включены 143 прожектора, лучи которых направлялись в сторону противника. Это новшество на короткое время возымело психологическое воздействие.
Проведение артиллерийской подготовки только на глубину первой позиции осложнило положение наступающих. Когда советские войска вышли ко второй, а на некоторых участках – к третьей позиции, огневое сопротивление противника возросло, он переходил в контратаки. Войска 1-го Белорусского фронта резко затормозили наступление. В связи с этим Жуков в тот же день для завершения прорыва главной полосы ввел в сражение 1-ю и 2-ю гвардейские танковые армии. В результате к исходу первого дня операции удалось завершить прорыв главной полосы вражеской обороны и выйти ко второй полосе. Попытки с ходу прорвать вторую полосу не увенчались успехом. Приходилось действовать в условиях сплошного оборонительного плацдарма противника, со множеством рек, каналов и озер. Значительно сложнее, чем казалось советскому командованию до начала операции, было взять Зееловские высоты. Здесь полегло огромное количество советских солдат.
С утра 17 апреля после 20—30-минутной артиллерийской подготовки войска ударной группировки фронта начали прорыв второй полосы обороны и после ожесточенных боев к исходу дня прорвали ее, продвинувшись за день на 6—13 км. В последующие два дня войска 1-го Белорусского фронта, отражая многочисленные вражеские контратаки, завершили прорыв третьей полосы вражеской обороны, то есть всего Одерского оборонительного рубежа противника, на глубину до 30 км.
16 апреля утром войска 1-го Украинского фронта форсировали р. Нейсе, захватили плацдарм па противоположном берегу и к исходу дня прорвали главную полосу обороны противника. На следующий день, 17 апреля, войска ударной группировки, в том числе и танковые армии, отразив контратаки резервов противника, прорвали вторую полосу обороны, продвинувшись за два дня на глубину 18 км. Немцы начали отход к третьей полосе обороны за р. Шпрее. 18 апреля советские войска форсировали Шпрее и взломали третью полосу обороны противника. Танковые армии приступили к окружению берлинской группировки. На четвертый день наступления 1 – й Украинский фронт прорвал Нейсенский оборонительный рубеж на всем фронте и вклинился в оборону врага до 50 км.
18 апреля начались боевые действия войск 2-го Белорусского фронта. В течение двух дней войска фронта форсировали Восточный Одер, очистили междуречье от противника, заняли исходное положение для наступления на восточном берегу Западного Одера. Этими действиями 2-й Белорусский фронт сковал силы 3-й танковой армии гитлеровцев, которая не могла помочь соседней 9-й армии, терпящей поражение под ударами 1-го Белорусского фронта.
Завершив прорыв Одерско-Нейсенского оборонительного рубежа, войска ударной группировки 1-го Белорусского фронта продолжали наступать на Берлин с северо-востока и востока, а войска 1-го Украинского фронта – с юга и юго-востока. 20 и 21 апреля войска 1-го Белорусского фронта ворвались на окраину города с севера и северо-востока.
21—22 апреля с юга к Берлину вышли и части 1-го Украинского фронта. 24 апреля войска 8 гвардейской, 3 и 69-й армий 1-го Белорусского фронта соединились юго-восточнее Берлина с 3-й гвардейской танковой и 28-й армиями 1-го Украинского фронта. Этим они рассекли берлинскую группировку противника на две части и одновременно окружили его франкфуртско-губенскую группировку (9-ю армию).
25 апреля войска 47-й и 2-й гвардейской танковой армий в районе северо-западнее Потсдама соединились с войсками 4-й гвардейской танковой армии 1-го Украинского фронта, завершив тем самым окружение всей берлинской группировки.