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