Книга первая
Прапорщик Шахов приезжает в Петроград, чтобы найти свою старую знакомую, Галину Бартошевскую. В стране неспокойно: идёт Первая Мировая война, народ недоволен, а Временное правительство не может справиться с ситуацией. Шахов хоть и не большевик, но поддерживает Советы. Приехав в Петроград, Шахов узнаёт, что произошло восстание. С трудом он добирается до нужного дома. Из подъезда, навстречу ему, выходит офицер. Галины дома не оказывается, а в двери Шахов находит записку от некоего А. Т., который сожалеет, что приехал и не застал её дома. К коменданту Зимнего Дворца приходит прапорщик Миллер для защиты Временного правительства. Узнав, что его полк перешёл на сторону восставших, он примыкает к находящимся во Дворце юнкерам.
Шахов примыкает к восставшим. Неожиданно он встречает писаря военно-полевого суда Главецкого. Главецкий предупреждает Шахова, что знает, что когда-то Шахов за революционную пропаганду был с фронта привезен в Варшаву.
Книга вторая
Шахов участвует в штурме Зимнего Дворца. Ворвавшись во Дворец Шахов сталкивается с обороняющимся до конца прапорщиком Миллером. Шахов ранит его в плечо, но неожиданно видит, что это переодетая Галина. Рискуя, Шахов выводит девушку из Дворца и доставляет домой.
Книга третья
В доме Галины Шахов встречает офицера Тарханова, которого он видел накануне. Тарханов надеется, что вмешаются союзники и с большевиками будет покончено. Шахов, наоборот, верит в победу большевиков.
Шахов встречает Главецкого, который предлагает ему сделку: за ценные вещи из Зимнего Дворца, Главецкий отдаст компрометирующие документы. Шахов отказывается.
Во время боя Тарханов берёт Шахова в плен. На допросе Шахов отказывается отвечать.
Шахову удаётся передать Галине записку, в которой он признаётся в любви и прощается с девушкой перед смертью. К Галине приходит Главецкий и намекает на прошлое Шахова, но она ничего не хочет слушать. Галина решает найти Шахова.
Главецкий зачитывает Шахову смертный приговор, но пленника освобождают матросы. И теперь в плен попадает Тарханов и даёт показания.
Галина едет к Шахову в район боевых действий.
Книга четвёртая
Галина встречается с Шаховым. Они признаются друг другу в любви и возвращаются в Петроград, где Шахов останавливается в гостинице. Командир Шахова Кривенко, ручаясь за него перед Военно-Революционным комитетом, посылает его в Москву.
Перед отъездом Шахов встречается с Галиной и рассказывает ей, что на фронте он попал под влияние своего сослуживца Раевского и стал вести вместе с ним революционную работу. Шахова арестовали и передали дело в Военно-полевой суд. Не выдержав ужасов ночных допросов, он пытался повеситься. Нечаянно на допросе Шахов выдал Раевского.
В номере Шахов находит письмо от Главецкого, в котором сообщается, что если Шахов не встретится с ним в номере гостиницы, где он остановился, Главецкий расскажет Галине, что он провокатор. Забыв письмо в номере, Шахов приходит к бывшему писарю. Главецкий пытается шантажировать Шахова, но Шахов убивает его. Забрав, компрометирующий его документ, Шахов незаметно уходит.
Шахов возвращается в свой номер и застаёт там Кривенко и Галину. Командир позволяет Шахову некоторое время побыть с Галиной и даёт ему револьвер, если Шахов решит сам застрелиться.
На суде Кривенко свидетельствует, Шахов не выполнил его приказ. Также Кривенко рассказывает о найденном в номере письме. Кривенко требует расстрела для провокатора, выдававшего людей и срывавшего деятельность подпольных организаций. Кривенко считает, что Шахов втёрся к нему в доверие, хотя и отличался храбростью во время боёв.
В защиту Шахова выступает находившийся в зале суда Раевский. Шахов не был провокатором, он выдал только его одного. Раевскому удалось сбежать из тюрьмы и он принял другую фамилию. Суд оправдывает Шахова.
Из Петрограда уезжает революционный отряд. На вокзале начальник отряда прощается с Галиной.