Перейти до змісту
Увійти

Теорія

Іконки, кольори й перевірки: що означає кожен стан GitHub

Читаємо статуси pull request, issues, GitHub checks, рев'ю, мітки й блок мерджу з першого погляду: що означає кожна іконка й колір, чим змерджений PR відрізняється від закритого і як розрізняти стани за формою й текстом, а не лише за кольором.

~10 хв читання · 12 вправ · 250 балів

Перед початком

Хвилина зі списком

Ще один ранок у продуктовій команді Котокорму, і Daniel ось-ось змерджить #134. Поки він цього не зробив, ти відкриваєш у репозиторії вкладку Pull requests і просто хвилину дивишся на список: іконки, кольори й маленькі позначки біля кожної назви.

У цьому уроці ти навчишся з першого погляду читати будь-який стан на GitHub — pull requests, issues, перевірки, рев'ю, мітки й блок злиття — і розрізняти їх за формою та текстом, а не лише за кольором.

Статус pull request з першого погляду

У списку Pull requests репозиторію кожен рядок починається з іконки: це статус pull request. Станом на 2026 рік їх чотири, і кожна має не лише колір, а й власну форму:

  • Відкритий (open): іконка pull request, дві точки, з'єднані лініями зі стрілкою. Зелена. Чекає на рев'ю чи мердж.
  • Чернетка (draft): та сама іконка з пунктирною лінією. Сіра. Робота триває; змерджити не можна.
  • Змерджений (merged): дві лінії сходяться в одну. Фіолетова. Зміни вже в базовій гілці.
  • Закритий (closed): іконка pull request із маленьким хрестиком. Червона. Закритий без мерджу; до коду нічого не потрапило.
Pull requests у catchow/website: Open
  • Fix checkout button after cart edits#134

    автор Daniel · Approved · перевірки пройдено · bug, checkout

  • Add autumn sale banner#136

    авторка Emma · Draft · content

  • Bump image-optimizer from 2.3.0 to 2.4.1#137

    автор dependabot · Review required · 1 перевірка впала · dependencies

Маленька позначка біля назви це інше: зведений результат перевірок.

За замовчуванням список показує лише Open. Змерджені й закриті pull requests лежать разом у Closed, поруч. Деякі рядки створюють боти: Dependabot, наприклад, відкриває pull request щоразу, коли бібліотека, яку використовує сайт, отримує нову версію. У терміналі gh pr list --state merged показує лише змерджені.

  • Так
    «#133 змерджено; #127 закрили без мерджу».

    Читає форму й називає стан.

  • Не так
    «Куди подівся #133? Його немає в списку, отже, його скасували».

    За замовчуванням список показує Open; змерджені лежать у Closed.

Вкладка Closed містить два різні фінали

Вкладку Closed у списку pull requests легко прочитати неправильно. Вона містить усі pull requests, які вже не відкриті, а це два дуже різні фінали:

  • Змерджений: іконка мерджу, дві лінії сходяться. Зміни вже в базовій гілці. У Котокорму мердж у main за кілька хвилин потрапляє на сайт.
  • Закритий без мерджу: іконка pull request із хрестиком. Його хтось закрив, і нічого з нього не дійшло до коду. Експеримент, що не вдався, дублікат чи робота, яку замінив кращий pull request.

Тож «він у Closed» каже лише, що pull request завершено, але не як. Читай іконку в кожному рядку, а не назву вкладки.

Для PM це важливо в кожному звіті. «За тиждень закрито п'ять pull requests» може означати п'ять випущених змін або п'ять покинутих. Рахуй змерджені й закриті окремо й називай кожен: «#132 і #133 змерджено, #127 закрили без мерджу». Якщо потрібен лише один вид, відфільтруй: is:merged або is:unmerged у полі пошуку над списком.

  • Так
    «Цього тижня: #132 і #133 змерджено, #127 закрили без мерджу».

    Два фінали, пораховані окремо.

  • Не так
    «Цього тижня закрили три pull requests, гарний прогрес».

    Змішує випущену й покинуту роботу.

Спершу форма, потім колір: називай стани словами

Сам колір слабкий сигнал. На сонці з телефона фіолетовий і сірий виглядають майже однаково. Приблизно кожен 12-й чоловік і кожна 200-та жінка бачать деякі кольори інакше, найчастіше червоний і зелений. А в налаштуваннях вигляду GitHub є теми для людей із порушеннями сприйняття кольору, які замінюють червоний і зелений іншими кольорами, тож екран колеги може зовсім не збігатися з твоїм.

Тому GitHub супроводжує кожен колір стану формою і словом: галочка, хрестик, пунктир, дві лінії, що сходяться; «Merged», «Draft», «Closed». Читай їх першими.

На яскравому сонці людина мружиться на телефон, де значки статусів відрізняються формою: просте коло, коло з галочкою й перекреслене коло.

Та сама звичка діє, коли ти пишеш чи говориш про стани. Називай їх:

  • «#133 змерджено».
  • «#136 досі чернетка».
  • «#138 закрили як незаплановане».

Ніколи «фіолетовий» чи «той сірий». Слово-колір змушує читача бачити те саме, що й ти, а дехто не може. Слово-стан працює для всіх, на будь-якому екрані й у будь-якій темі, і зрозуміле, навіть коли його вимовляють уголос на зустрічі.

  • Так
    «#136 досі чернетка; Emma ще не просила рев'ю».

    Слово-стан, зрозуміле всім.

  • Не так
    «Сірий це Emma, а фіолетові готові».

    Залежить від екрана, теми й зору.

Стани issue: випущено чи скасовано

Issues мають власні іконки, і всі вони кола, тож їх одразу видно серед pull requests. Станом на 2026 рік:

  • Відкрите: коло з крапкою всередині, зелене.
  • Закрите як виконане (completed): коло з галочкою, фіолетове. Роботу зроблено. Фіолетовий тут означає «завершено», як і на змердженому pull request.
  • Закрите як незаплановане (not planned): коло з косою рискою, сіре. Команда вирішила цього не робити.
Issues у catchow/website
  • Checkout button stays grey after editing cart#131

    відкрила підтримка · bug, checkout · пов'язаний pull request #134

  • Test an orange checkout button#135

    відкрив Daniel · idea

  • Courier rates up from 1 June#120

    Closed as completed: закрито як виконане

  • Show prices in euros#138

    Closed as not planned: закрито як незаплановане

Коли issue закривають, GitHub питає причину, і іконка її відображає. Команда, яка вирішила не показувати ціни в євро, закриває цю ідею як незаплановану, а не вдає, що її зроблено. У терміналі: gh issue close 138 --reason "not planned". GitHub пропонує ще й причину «duplicate» (дублікат).

Для PM це різниця між випущеним і скасованим. Обидва issues закриті, але лише одне означає, що роботу хтось зробив. У звітах про issues ніколи не рахуй їх разом. І пам'ятай: фіолетовий змерджений pull request і фіолетове виконане issue мають спільний колір, але не форму.

Дві закриті коробки: одну зі стрічкою й печаткою-галочкою виносять покупцям, другу з печаткою-хрестиком відкладають на задню полицю.
Обидві закриті, але лише одна означає, що роботу зроблено.
  • Так
    «#131 закрито як виконане, #138 закрито як незаплановане».

    Випущене й скасоване окремо.

  • Не так
    «Цього тижня закрито два issues, обидва готові».

    Одне з них так і не зробили.

Перевірки GitHub з першого погляду

Перевірки GitHub (checks) це автоматичні запуски, які GitHub показує на кожному коміті pull request: збирання сайту, тести, деплой preview. Команда може зробити деякі з них обов'язковими (required status checks), і тоді pull request не змерджиш, поки одна з них падає.

Кожна перевірка має один із чотирьох результатів (станом на 2026 рік):

  • коло з галочкою, зелене: пройшла;
  • коло з хрестиком, червоне: впала;
  • крапка, жовта: у черзі чи ще триває;
  • сіра, часто коло з косою рискою: пропущена (skipped) або нейтральна; перевірка не запускалася чи не дала вердикту.
Перевірки на #137
  • build

    Successful: успішно

  • test

    Failing: впав 1 тест на зображення товарів

  • preview

    Skipped: для оновлень залежностей preview не запускають

Маленька позначка біля назви pull request у списку підсумовує всі його перевірки: один червоний хрестик означає, що впала принаймні одна. Відкрий pull request або виконай gh pr checks 137, щоб побачити, яка саме.

Читай результат як він є: це твердження про конкретну гілку. Червоний хрестик на #137 від Dependabot означає, що оновлення бібліотеки зламало тест у його власній гілці. Живий сайт, зібраний із main, працює.

  • Так
    «На гілці #137 упав test; живий сайт це не зачіпає».

    Каже, де саме падіння.

  • Не так
    «Жовта крапка означає, що перевірка пройшла з попередженнями».

    Жовта означає «у черзі» чи «ще триває».

Пропущено не означає пройдено

Сіра, пропущена перевірка це найпідступніший результат на сторінці. Вона виглядає спокійно, вона не червона, і станом на 2026 рік пропущене завдання не блокує мердж, навіть коли перевірка обов'язкова. GitHub вважає, що «скаржитися нема на що».

Але «пропущено» означає, що перевірка не запускалася. Preview ніхто не зібрав, тести ніхто не прогнав. Це як пропускний пункт із порожньою будкою й піднятим шлагбаумом: машини проїжджають, і ніхто не зазирнув усередину.

Автомобіль проїжджає пропускний пункт із порожньою будкою й піднятим шлагбаумом; інспектора всередині немає.
Пропущена перевірка означає, що ніхто не дивився, а не що все гаразд.

Перевірки пропускаються з буденних причин: процес запускається лише тоді, коли змінюються певні файли, pull request від бота не отримує секретів, або завдання залежить від іншого, яке впало. На #137 від Dependabot preview пропущено, тож посилання на preview немає.

Вигляд GitHub · є вище

Що це означає для PM:

  • Не звітуй про пропущену перевірку як про «все зелене».
  • Якщо пропущена перевірка стосується того, що тобі треба переглянути (скажімо, preview), спитай, чому вона не запускалася, перш ніж схвалювати.
  • У статусі кажи прямо: «test упав, preview пропущено».
  • Так
    «На #137 preview пропущено, тож оновлення в браузері ще ніхто не бачив».

    Сприймає «пропущено» як «не перевірено».

  • Не так
    «На preview немає червоного, отже, там усе гаразд».

    Вона взагалі не запускалася.

Вердикти рев'ю та їхні іконки

Рев'ю теж мають іконки. На сторінці pull request вони стоять біля імені кожного рев'юера в бічній панелі (станом на 2026 рік):

  • галочка: схвалено, можна зливати;
  • файл із плюсом і мінусом: запит на зміни, спершу щось треба змінити;
  • хмаринка діалогу: коментар, відгук без вердикту;
  • маленька крапка: рев'ю попросили, і воно ще чекає; людина ще не переглядала.
Вердикти рев'ю
  • Approved

    Галочка: рев'юер каже, що можна зливати

  • Changes requested

    Файл із плюсом і мінусом: спершу потрібні зміни

  • Commented

    Хмаринка діалогу: коментарі без вердикту

У списку pull requests кожен рядок підсумовує рев'ю словами: «Review required» (схвалення ще немає), «Approved» чи «Changes requested». Pull request від Dependabot, який ніхто не відкривав, каже «Review required».

Дві речі варто пам'ятати. Коментар не схвалення: рев'юер, який лише ставив питання, ще не сказав «так». А крапка біля твого власного імені означає, що хтось чекає саме на тебе. Швидкий фільтр для цього: review-requested:@me у пошуку pull requests або gh pr list --search "review-requested:@me" у терміналі.

  • Так
    «Oscar схвалив, Sofia прокоментувала питанням; вердикту від Sofia ще немає».

    Відрізняє коментар від схвалення.

  • Не так
    «Двоє рев'юерів відповіли, отже, схвалено двічі».

    Хмаринка діалогу не галочка.

Мітки: кольори команди

Мітки (labels) це єдине місце, де колір нічого не означає для GitHub. Колір мітки обирає той, хто її створює. Нові репозиторії мають кілька стандартних, як-от червону bug, але команда хоч завтра може зробити bug рожевою, а синя мітка синя лише тому, що хтось обрав синій.

Тож розрізняй дві речі:

  • стан показує іконка зліва в рядку: відкритий, чернетка, змерджений, закритий;
  • мітка каже, чого стосується елемент: bug, checkout, content, idea, dependencies.

Червона мітка bug на відкритому pull request це просто відкритий pull request про баг. Вона не означає «терміново», «впало» чи «заблоковано». Синя мітка dependencies не означає, що перевірки пройшли чи що pull request чекає на рев'ю. Деякі мітки додаються автоматично: Dependabot ставить dependencies на власні pull requests.

Невеликий набір міток читати легше, ніж великий. П'ять міток, зрозумілих усій команді, кращі за п'ятдесят у дванадцяти кольорах. Фільтр за міткою: gh pr list --label bug.

  • Так
    «#137 відкритий; він має мітку dependencies, бо оновлює бібліотеку».

    Стан з іконки, тема з мітки.

  • Не так
    «Вона червона, отже, це терміново».

    Колір мітки це вибір команди, а не статус.

Блок мерджу згори донизу

Унизу Conversation блок мерджу показує, що ще стоїть між pull request і мерджем. Станом на 2026 рік він може казати:

  • Review required: схвалення ще немає. Заблоковано.
  • Changes requested: рев'юер попросив змін. Заблоковано.
  • Some checks were not successful: перевірка впала. Заблоковано, якщо вона обов'язкова.
  • Some checks haven't completed yet: перевірки тривають. Чекай.
  • This branch is out-of-date with the base branch: коли правила вимагають оновленої гілки, натисни Update branch.
  • This branch has conflicts that must be resolved: спершу хтось має розв'язати конфлікти.
  • All checks have passed і no conflicts, плюс схвалення: кнопка мерджу стає зеленою.

Update branch зливає базову гілку в гілку pull request (у терміналі gh pr update-branch 134). Це новий коміт, тож перевірки запускаються знову, і тепер вони тестують зміну разом з усім, що потрапило в main відтоді. Точні формулювання з роками змінюються; зміст ні.

fix/checkout-button після Update branchUpdate branch приніс три нові коміти main у гілку мердж-комітом 9e3b5d2. Тепер гілка відстає на 0, а перевірки йдуть на 9e3b5d2.
  1. f02a6d4Update FAQ answers
  2. 3a9d1c4Reproduce bug in a test
  3. 8be2f70Add cat treats bundle
  4. b7e4a05Re-enable button after cart edits
  5. 6f2c8a1Raise free-delivery threshold to 1000 UAH (#133)
  6. a7d93e4Rewrite delivery page copy (#132)main
  7. c2d7f90Update checkout hint copy
  8. f7a2b61Restore checkout button colour
  9. 9e3b5d2Merge branch 'main' into fix/checkout-buttonfix/checkout-button

Граф комітів, від найстарішого: fix/checkout-button після Update branch 1. коміт f02a6d4 у main "Update FAQ answers" 2. гілка fix/checkout-button починається від коміту f02a6d4 3. коміт 3a9d1c4 у fix/checkout-button "Reproduce bug in a test" 4. коміт 8be2f70 у main "Add cat treats bundle" 5. коміт b7e4a05 у fix/checkout-button "Re-enable button after cart edits" 6. коміт 6f2c8a1 у main "Raise free-delivery threshold to 1000 UAH (#133)" 7. коміт a7d93e4 у main "Rewrite delivery page copy (#132)" 8. коміт c2d7f90 у fix/checkout-button "Update checkout hint copy" 9. коміт f7a2b61 у fix/checkout-button "Restore checkout button colour" 10. мердж-коміт 9e3b5d2: main змерджено в fix/checkout-button "Merge branch 'main' into fix/checkout-button" (виділено)

  • Так
    «#134 застарів; Daniel натиснув Update branch, і перевірки запустилися знову».

    Читає повідомлення й наступний крок.

  • Не так
    «Два схвалення й зелені перевірки, отже, кнопка мерджу має працювати».

    Застаріла гілка все одно може блокувати мердж.

Змерджений чи закритий, і що буває після мерджу

Розрізняй два фінали pull request. Змерджений переніс свої коміти в базову гілку. Закритий закрили без мерджу, і до коду нічого з нього не потрапило. Обидва лежать у Closed у списку, тож читай іконку, а не вкладку.

У Котокорму мердж #134 у main запускає ланцюжок:

  • Із Squash and merge у main з'являється один коміт: «Fix checkout button after cart edits (#134)».
  • Ключове слово Fixes #131 закриває issue #131 як виконане: коло з галочкою.
  • Змерджена гілка видаляється автоматично, це налаштування репозиторію, яке команда ввімкнула.
  • Починається деплой. «Змерджено» стає «на сайті» лише тоді, коли він завершиться, за кілька хвилин; тоді варто ще раз глянути на живий сайт із телефона.
#134 і #131 після мерджу
  • Fix checkout button after cart edits#134

    Змерджено в main як d51c7e8

  • Checkout button stays grey after editing cart#131

    Закрито як виконане завдяки #134

І три питання про будь-який мердж: змерджено куди, коли і чи воно досі там? Для #134: main, 9:40, і так, ніхто його не відкотив.

  • Так
    «#134 змерджено в main о 9:40, #131 закрито як виконане, на сайті після деплою».

    Куди, коли й що далі.

  • Не так
    «#127 у Closed, отже, його випустили».

    Закритий без мерджу означає, що нічого не випущено.

Готові потренуватися?

Виконайте вправи уроку й отримайте 250 балів, коли пройдете його вперше.

Розпочати вправи