linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Совместная работа/code-review

kb/collab ── Совместная работа ── intermediate

Code review

Чтение и обсуждение кода другого разработчика перед merge. Главная цель - поделиться контекстом, а не найти баги (баги - побочный результат). Хороший ревью улучшает код и распространяет знание о системе по команде.

view as markdownaka: review

Code review - практика чтения изменений перед влитием в основную ветку. На уровне инструмента - комментарии в Pull Request (см. pull-request). На уровне культуры - отдельный навык, влияющий на скорость команды больше, чем выбор фреймворка.

Зачем

Главные функции по убыванию:

  1. Распространение знания. Через год ревьюер всё ещё знает, что в этом куске кода происходит. Без ревью - только автор. Команда устойчивее к увольнениям и отпускам.
  2. Договорённость о стандарте. Каждое ревью - это разговор «как мы пишем тут». Стандарт держится живым.
  3. Поиск проблем. Логические ошибки, неучтённые edge case, проблемы производительности, безопасность. Автор замылен - ревьюер видит свежим взглядом.
  4. Защита от регрессий. Старший ревьюер ловит «эта правка сломает другую систему».
  5. Менторство. Обратная связь - главный способ роста новичка.

«Ловить баги» - пятое в списке. Большинство багов найдут тесты; ревью отлавливает то, что тесты не проверяют (архитектурные решения, читаемость, неявные допущения).

Хорошие практики автора

  • Маленькие PR'ы. До 300 строк, в идеале - до 100. Ревьюер прочитает быстро, найдёт больше.
  • Описание PR. Зачем, что, как проверить. Без описания ревьюер тратит первые 10 минут на восстановление контекста.
  • Скриншоты для UI. Сэкономит ревьюеру локальный запуск.
  • Self-review перед запросом ревью. Прочитай свой diff, исправь очевидное - никто другой не должен находить за тебя console.log или TODO.
    • Не обижайся на комментарии. Ревью - про код, не про автора. Если комментарий звучит обидно - обычно это привычка ревьюера, не злой умысел. Спроси «что ты предлагаешь?», не возражай в защиту.

Хорошие практики ревьюера

  • Отвечай быстро. PR > 24 часов без ответа - авторе теряет контекст. Идеал - несколько часов.
  • Объясняй, не приказывай. Не «исправь», а «здесь возможна проблема X - что думаешь?». Особенно с младшими.
  • Различай уровни замечаний. Использовать префиксы:
  • nit: или (non-blocking) - мелочь, можно проигнорировать.
  • suggestion: - идея, не обязательная к применению.
  • must: или (blocking) - нужно поправить до merge.
  • question: - просто вопрос, без претензии.
  • Замечание = причина. «Можно лучше» - плохо. «Здесь возможен null reference, см. строку X в auth.py» - хорошо.
    • Approve, когда готово. Не «approve с замечаниями» - это путаница. Если есть блокирующее - request changes. Если нет - approve.

Структура замечаний (стандарт Conventional Comments)

praise: Хорошо реализовано через композицию, чисто.
nit: Лучше переименовать `data` в `userResponse` - понятнее.
suggestion: Можно вынести в утилиту, использовать в trei местах.
question: Зачем тут try/catch без обработки?
issue (blocking): Этот код проглатывает ошибку - нужно либо
пробросить, либо логировать.

Префикс сразу говорит о тоне и обязательности. Сильно ускоряет обсуждение.

Что искать

Чек-лист «о чём думать при ревью»:

  • Понятность. Через год другой разработчик прочитает и поймёт?
  • Корректность. Решает ли задачу из описания PR?
  • Edge cases. Что с null, пустым массивом, очень большими данными, гонкой?
  • Тесты. Покрывают ли изменение? Тестируют ли поведение, а не реализацию?
  • Безопасность. Пользовательский ввод санируется? Доступы проверяются?
  • Производительность. Не появилось ли n² там, где должно быть n?
  • Согласованность. Стиль соответствует остальному коду?

Не пытаться найти всё за один проход. Сначала understanding (понимаю ли я, что происходит), потом correctness, потом мелочи.

Подводные камни

  • Bikeshedding. Бесконечные обсуждения цвета кнопки/имени переменной. Договорись с командой о time-box или линтер-правилах.
  • Approve «не глядя». На больших PR это норма, но это значит, что ревью не работает. Решение - заставлять разбивать PR.
  • Конфликт уровней. Senior ревьюит junior'а слишком жёстко, junior ревьюит senior'а слишком робко. Договоритесь, что в ревью нет иерархии - оба отвечают за качество.
  • Эго-ревью. «Я бы написал по-другому». Если код решает задачу и читается - это легитимный вариант, не повод требовать переписать.

§ см. также

  • pull-requestPull Request (PR)Запрос на влитие ветки в основную с прохождением ревью и CI. На GitHub/GitLab/Bitbucket - стандартный механизм совместной работы. Технически это не команда Git, а функция хостинга, надстроенная над веткой и серией коммитов.
  • merge-strategiesСтратегии merge PR (GitHub)В GitHub три кнопки для merge PR: Create a merge commit (--no-ff, с merge-коммитом), Squash and merge (один сжатый коммит без родителя из ветки), Rebase and merge (rebase + fast-forward без merge-коммита). Команды выбирают одну для всего проекта.
  • atomic-commitАтомарный коммитКоммит, который делает одну логически целостную правку. Каждый атомарный коммит можно безопасно revert'нуть, на каждом сборка и тесты проходят. Основа здоровой истории Git.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки