Pod koniec lipca 1944 r. wojska sowieckie realizując cele operacji „Bagration”, zajęły niemal wszystkie tereny między Zachodnią Białorusią a linią Wisły. Szły z impetem tak wielkim, że siły niemieckie były miażdżone niemal bez oporu – a przynajmniej z oporem tak nieskutecznym, że nie wyrządzał on Rosjanom żadnych poważniejszych szkód.
Niemcy mieli wszelkie podstawy, by przypuszczać, że Armia Czerwona pójdzie za ciosem i zaatakuje Warszawę: administracji cywilnej nakazano ewakuację, wojskowe oddziały zaś wzmocniono rezerwami i przygotowano się do obrony miasta. Nie wiadomo, czy w stolicy spodziewano się wybuchu powstania, ale jakiejś formy wzmożenia aktów dywersji ze strony polskiego podziemia z pewnością. Tym bardziej że w mieście panował pod tym względem coraz większy chaos, a konspiracja coraz częściej dekonspirowała się i dokonywała wielu niemal jawnych już akcji, czasem zupełnie spontanicznych – jak wspominał prof. Tomasz Strzembosz, niekonsultowanych nawet z dowództwem. Przez chwilę wszystkie trzy strony – Niemcy, Rosjanie i Polacy – trwali w stanie wzajemnego zaszachowania, bo żadna z nich nie wiedziała, jaki będzie ruch pozostałych.
„Rzeczą największej wagi był wybór odpowiedniego momentu” – pisał Norman Davies. I istotnie, jeśli Niemcy zaczęliby zbyt szybko wycofywać się z miasta, sprowokowałoby to Polaków do podjęcia walki, co oznaczałoby poważne straty, a także utratę mocnej linii obrony, jaką stanowiła Wisła. Jeśli z kolei Polacy podjęliby bitwę, zanim rozpoczęliby ją Niemcy i Rosjanie, ryzykowaliby ogromne straty. Podobnie Rosjanie. Gdyby uderzyli na miasto spontanicznie, nie zdoławszy zebrać dostatecznej ilości ciężkiego sprzętu, Niemcy byliby w stanie stawiać wciąż bardzo silny opór. Najbardziej nieprzewidywalny był ruch Rosjan. O ile wiadomo, marszałek Konstanty Rokossowski był przekonany, że powinien uderzyć na Warszawę i być może by to zrobił, gdyby miał realną możliwość podejmowania decyzji. W Armii Czerwonej wszystkie zasadnicze decyzje były podejmowane na Kremlu i stanowiły efekt osobistych zamierzeń Stalina, i nikt nie był w stanie ich przewidzieć.
W tej sytuacji pierwsi uderzyli Niemcy. 30 lipca 1944 r. rozpoczęła się ich kontrofensywa, która co prawda nie miała szans zniszczyć sił sowieckich, ale była w stanie skutecznie je związać i przynajmniej opóźnić uderzenie na Warszawę. Nie wiedzieli, że uderzenie takie nie było na Kremlu planowane, a rozpoczęta tego dnia kontrofensywa zwiąże nie Sowietów, lecz przeciwnie – Niemców. I to tak skutecznie, że otworzy to Rosjanom drogę do podboju krajów naddunajskich i Bałkanów.
„I to było właśnie pokerowe zagranie dowództwa sowieckiego: gdy Niemcy swoje najlepsze siły gromadzili na kierunku warszawskim, Rosjanie w końcu sierpnia uderzyli na Bałkany, zajmując Rumunię, Bułgarię i część Węgier, porządkując sytuację na froncie przed ofensywą zimową” – pisał Jan Sidorowicz.
Warszawa była w tym momencie dla Stalina nieistotna. Po pierwsze, nie musiał się spieszyć – i tak wyprzedzał zachodnich aliantów w drodze do Berlina. Po drugie, powstanie, które miało tam wybuchnąć i do którego wzywał warszawiaków stosownymi odezwami, pozwalało mu łatwo rozwiązać sporo problemów natury politycznej. Niemcy jednak o tym wszystkim nie mogli wiedzieć. Dlatego właśnie 30 lipca podjęli kontruderzenie, które miało odepchnąć Rosjan od polskiej stolicy.
Obie strony dysponowały potężnymi siłami – z każdej z nich udział w walkach wzięło ok. tysiąca czołgów, przy czym pewną przewagę Niemcom zapewniały pobliskie lotniska, których Rosjanie nie zdążyli jeszcze przygotować. Nie bez znaczenia było także zmęczenie Rosjan, którzy od wielu tygodni parli w praktycznie nieustannym ataku, znacznie intensywniejszym niż niemiecki blitzkrieg z 1939 r. Po stronie niemieckiej na przedpolach Warszawy walczyły elitarne jednostki: 1. Dywizja „Hermann Göring”, 5. Dywizja SS „Wiking”, 3. Dywizja SS „Totenkopf” oraz 4–19. Dywizja Pancerna. Przeciwko nim Rosjanie wystawili trzy korpusy pancerne (3, 8 i 16) 2. Armii Pancernej.
Formalnie jako datę rozpoczęcia bitwy podaje się 25 lipca – wtedy bowiem w rejonie Radzymina pojawiły się pierwsze sowieckie czołgi, co było jednocześnie sygnałem do podjęcia ostatecznej decyzji o wybuchu powstania w Warszawie. W praktyce walki rozpoczęły się jednak 30 lipca. Podobnie umowna jest nazwa tego starcia. Czasem określa się je bitwą warszawską, kiedy indziej radzymińską, jeszcze inni piszą o bitwie wołomińskiej. Wszystkie te sformułowania są rzecz jasna poprawne – łatwo się domyślić, że dwa tysiące manewrujących czołgów zajmuje olbrzymią przestrzeń. Brak jednolitej nazwy należy zaś złożyć na karb faktu, że o bitwie tej pisano przez kilka dziesięcioleci niewiele – jej wynik był niekorzystny dla Rosjan. Choć jednocześnie w pełni realizował strategię Stalina.
W początkowej fazie walk nic jednak nie wskazywało na takie rozstrzygnięcie. Rosjanie parli, przełamując niemiecką obronę w okolicach Garwolina i Stoczka. Kiedy tego samego dnia w rosyjskie ręce wpadły wsie Jagodne, Puznów i Głosków, Niemcom zaczęło grozić okrążenie. Sytuacja zaczęła się zmieniać 28 lipca, gdy Niemcy wprowadzili dywizję „Hermann Göring” – do poważnych i, jak się okazało, przełomowych starć doszło w okolicach Siennicy. Wieś przechodziła z rąk do rąk tego i następnego dnia, przy czym przewagę wciąż utrzymywali Rosjanie.
Kulminacja nastąpiła 30 lipca. W niemieckich rękach znajdowały się wówczas podwarszawskie miasteczka Wołomin, Zielonka, Otwock i Mińsk Mazowiecki, na które tego właśnie dnia uderzyli Rosjanie – w ciągu całego niemal dnia zaciętych walk i ponawianych kontrataków niemieckich zajęli je, a przy okazji Świder, Wiązownę oraz Józefów. Kiedy kolejnego dnia Rosjanie opanowali Mińsk Mazowiecki, położenie Niemców wydawało się tragiczne.
Tak właśnie wyglądała sytuacja w chwili, gdy 1 sierpnia w Warszawie wybuchał zryw. Nie wiadomo, na ile powstańcy znali rozwój wypadków na froncie, ale prawdopodobnie mogli zakładać, że Niemcy nie wytrzymają impetu Armii Czerwonej. Tego jednak dnia Niemcy, być może właśnie z powodu powstania, podjęli ruchy, które sytuację zmieniły. Dywizje „Totenkopf” i „Wiking” uderzyły z okolic Nieporętu i zbliżyły się do Okuniewa, po drodze zajmując Strugę. Następnego dnia atakując Stanisławów, dotarły na tyły jednostek sowieckich, odcinając je od zaopatrzenia.
I w tym właśnie momencie doszło do najbardziej zagadkowej akcji w całej bitwie. Okrążony przez Niemców rosyjski 3. Korpus Pancerny mógł liczyć na wsparcie. W okolicach pobliskiego Wołomina przebywał wówczas 16. Korpus Pancerny, a także 125. Korpus Strzelców – taktycznie patrząc, nie było powodu, by jednostki te nie zaatakowały sił niemieckich. A jednak nie zrobiły tego. Najprawdopodobniej była to znów osobista decyzja Stalina, któremu nie zależało na całkowitym rozbiciu sił niemieckich, które działały w tej chwili na jego korzyść, walcząc z powstańcami w Warszawie. 3. Korpus pozostał więc bez wsparcia. Jak oceniają badacze, Rosjanie i tak dokonywali cudów waleczności, skoro nie tylko przez cały dzień wytrzymali impet dwóch potężnych jednostek niemieckich, posiadających mocne wsparcie lotnicze, lecz i udało im się zadać Niemcom spore straty i w ludziach, i w sprzęcie. A jednak cofali się. 1 sierpnia Niemcy opanowali Okuniew, następnego dnia Radzymin, a 3 sierpnia Wołomin.
Formalnie starcia trwały jeszcze trzy dni, ale już wówczas było jasne, że Rosjanom wystarczy tyle, ile osiągnęli. Już 1 sierpnia rosyjskim oddziałom wydano oficjalny rozkaz przejścia do defensywy. Jak pisali Czesław Brzoza i Andrzej Leon Sowa:
„O ile decyzja przejścia do obrony 2. Armii Pancernej bez wątpienia uwarunkowana była przyczynami wojskowymi – tak też pisano o tym w przygotowanym przez KG AK w styczniu 1945 r. opracowaniu +Bitwa o Warszawę+ – o tyle kontrowersje wśród historyków wciąż wywołuje fakt późniejszego niewznowienia radzieckiego natarcia. Swoje stanowisko – podtrzymywane następnie przez historyków sowieckich – strona radziecka uzasadniała nie tylko niekorzystnym przebiegiem bitwy pancernej pod Warszawą, ale także trudnościami w zaopatrywaniu wojsk w broń i amunicję oraz powolnym ruchem swych armii działających na północny wschód od Białegostoku. Jednak większość historyków polskich nie ma wątpliwości, że decyzja o niewznowieniu ofensywy sowieckiej w kierunku Warszawy spowodowana była przyczynami politycznymi”.
Nie polemizując z tą opinią, Norman Davies oceniał:
„Bitwy pancerne pod Radzyminem i Wołominem zaliczono do największych niepowodzeń Armii Czerwonej na 1. Froncie Białoruskim. Na sowiecki łuk linii frontu pod Warszawą spadły aż cztery niemieckie dywizje pancerne. W rezultacie wojska Rokossowskiego, które znalazły się dosłownie w zasięgu wzroku mieszkańców Warszawy, zostały w środkowym odcinku zepchnięte kilkadziesiąt kilometrów w stronę Bugu. W sytuacji, gdy Wehrmacht wycofywał się na całej linii w większości innych miejsc, z pewnością należy to uznać za wyjątkowe osiągnięcie Niemców”.
5 sierpnia walki ustały niemal zupełnie. Pod Warszawą, bo w Warszawie wrzało powstanie. Rzecz jednak ciekawa, że Armia Krajowa miała swój udział również w tej wielkiej bitwie pancernej. Uaktywnione akcją „Burza” oddziały Podokręgu Wschodniego, dowodzone przez płk. Hieronima Suszczyńskiego „Szeligę” z Obszaru Warszawskiego AK, walczyły w trakcie wyzwalania Radzymina, Węgrowa i Mińska Mazowieckiego.