Основной целью операции было разгромить противостоявшие немецкие силы 2-й танковой и 4-й армии группы армий «Центр» и развивать наступление на города Калуга, Лихвин, Сухиничи. Войскам 49-й армии генерал-лейтенанта Ивана Григорьевича Захаркина и 50-й армии генерал-лейтенанта Ивана Васильевича Болдина поставлена задача по освобождению Калуги. Овладение Калугой - важным узлом железнодорожных, шоссейных и грунтовых дорог - открывало путь войскам левого крыла фронта для широкого наступления на запад. Кроме того, в этом городе были сосредоточены крупные вражеские базы снабжения.
Для этого в составе 50-й армии решением Болдина была создана подвижная группа под командованием заместителя командующего армией генерал-майора Василия Степановича Попова, в которую вошли 54-я стрелковая дивизия, 112-я танковая дивизия и 31-я кавалерийская дивизия, две батареи гвардейского минометного дивизиона, огнеметно-фугасная рота, Тульский рабочий полк, отдельный танковый батальон и некоторые другие соединения.
В ночь на 18 декабря 1941 года подвижная группа Попова начала продвижение. Обходя населенные пункты, не ввязываясь в бои с противником, подвижная группа прошла за трое суток около 90 км и к исходу 20 декабря скрытно вышла к Калуге с юга. Утром 21 декабря части подвижной группы 50-й армии захватили мост через реку Оку, ворвались в Калугу и завязали уличные бои с гарнизоном города.
К 22 декабря к Калуге подтянулись немецкие части, собранные из нескольких дивизий. Подвижная группа 50-й армии фактически вела бои за город в окружении.
Тем временем войска 49-й армии, освободив 19 декабря Тарусу, вышли на линию Малоярославец – Калуга. Приближались к Калуге и основные силы 50-й армии. Помощь ей оказал 1-й гвардейский кавалерийский корпус генерала Белова, который вышел к Одоеву южнее Калуги. К 24 декабря кавалерийский корпус вышел к реке Оке южнее Лихвина. Тем самым немецкие части, сражавшиеся на шоссе Калуга – Тула, оказались глубоко охвачены с юга.
Воспользовавшись успехом кавалеристов, обходной маневр начали выполнять дивизии 50-й армии. Левофланговая 290-я стрелковая дивизия двинулась на Калугу с юго-востока и к утру 24 декабря вела бой за пригород Калуга – Пушкино.
217-я стрелковая дивизия относительно быстро продвинулась вперед и к 24 декабря вышла к Оке в районе Перемышля и к исходу 25 декабря выбила из города части 137-й пехотной дивизии.
Выход на рубеж Оки позволил 50-й армии начать наступление в обход Калуги. Дивизии левого фланга армии (217-я и 413-я) нацеливались на Утешево (в 36 км к западу от Калуги).
Одновременно левофланговые дивизии 49-й армии, наносившие удар в направлении на Детчино, нависли над калужской группировкой противника с севера.
Однако сдавать такой сильный опорный пункт, как Калуга, без боя немцы не собирались. Бои за сам город вели соединения подвижной группы В.С.Попова. Части 112-й танковой, 154-й стрелковой и 31-й кавалерийской дивизий неуклонно приближались к центру города. При отступлении нацисты разрушили 196 домов, оставив без крова более 850 семей, сожгли театр на Сенной площади. К исходу 28 декабря было занято уже 20 кварталов, а в ночь на 30 декабря немцы были разбиты. Калуга была полностью очищена от противника. Сержант 290-й стрелковой дивизии С.П. Андреев поднял над железнодорожным зданием красное знамя. Именно железнодорожный вокзал удерживался немцами особенно упорно. Оборону здесь держало подразделение СС. Дело в том, что на путях стояли приготовленные к отправке вагоны с ценными грузами. Отступающие так и не успели их вывезти.
В боях за Калугу было уничтожено более 5000 фашистов. Захвачено 38 паровозов, 300 вагонов, 282 грузовые машины, 25 танков, 70 мотоциклов, 39 орудий. Особенно отличились 154-я и 258-я стрелковые дивизии, 112-я танковая дивизия, 885-й стрелковый полк 290-й стрелковой дивизии. После освобождения Калуги 50-я армия вошла в глубокий прорыв, нарушая противнику тыловые коммуникации и сковывая действия его частей, оперировавших по оси Варшавского и Киевского шоссе. Противник был отброшен к Юхнову, на 200 километров от Москвы.