Branch
Приклад:
Stale branches створюють шум і плутанину.;== Коли Branch має змогу бути зайвим ==
{{SEO
|title=Branch — гілка в Git, version control, розробці ПЗ, workflow і командній роботі
|description=Branch — Wiki-стаття про branch як гілку розробки у системах контролю версій, особливо Git. Розглянуто Git branch, main, master, feature branch, bugfix branch, release branch, hotfix branch, merge, rebase, pull request, merge conflict, trunk-based development, Git Flow, CI/CD, branch protection, naming conventions, переваги, ризики, цікаві факти і хороші практики.
|keywords=Branch, гілка, Git branch, version control, source control, Git, main branch, master branch, feature branch, bugfix branch, hotfix branch, release branch, merge, rebase, pull request, merge conflict, trunk-based development, Git Flow, branch protection, CI/CD, software development
|alternativeTo=розробка всіх змін прямо в main; копіювання папок project-final-v2; ручне збереження різних версій коду; робота без version control; хаотичні zip-архіви; long-lived code copies; зміни без pull request; deployment без відокремлення стабільного коду від експериментів
}}
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
git branch -r
experiment/new-cache
<<<<<<< HEAD
title: "Profile"
=======
title: "Account settings"
>>>>>>> origin/main
<syntaxhighlight lang="text">
Branch застосовується для ізоляції змін.;== Branch у Open Source ==
'''Практична порада:''' використовуйте develop branch тільки якщо він справді потрібен вашому release process.;<syntaxhighlight lang="bash">
</div>
Або створити й одразу перейти на неї:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Обидві назви можуть означати основну гілку, але конкретна назва залежить від repository.; Open pull request
remote: origin/feature/login-page
</div>
bugfix/payment-total
- unit tests;
- integration tests;
- linting;
- type checks;
- security scans;
- build;
- preview deployment;
- code coverage;
- static analysis.; Практична роль: preview environment надає можливість побачити branch як живий застосунок, а не тільки diff у коді.; До secrets належать:
Branch strategy має визначати: </syntaxhighlight>
Technical writer створює `docs/api-rate-limits`, оновлює документацію й відкриває PR для review.; ↓
Merge conflicts вирішені уважно
Примусово локально:
Short-lived branches добре поєднуються з:
* нових features;
* bug fixes;
* hotfixes;
* release preparation;
* experiments;
* refactoring;
* documentation changes;
* CI/CD testing;
* code review;
* temporary prototypes;
* migration work;
* long-running projects;
* open source contributions.; spike/payment-provider
== Release Branch ==
'''Проста різниця:''' branch — це дорога, tag — це пам’ятний знак на конкретному місці дороги.; bugfix/cart-total
title: "Account settings"
CI зелений
Feature branch надає можливість:
{| class="wikitable"
'''Головне правило:''' branch має допомагати інтеграції, а не відкладати її назавжди.; Приклади назв:
Bugfix Branch
До:
- хто має змогу push у protected branches;
- чи потрібні reviews;
- чи проходять security scans;
- чи немає secrets у branch;
- чи не публікуються private changes;
- чи fork PR не має доступу до secrets;
- чи підписуються commits;
- чи обмежені deploy permissions;
- чи не можна обійти CI.; Вона має залишатися стабільною.;
Але великі datasets і model artifacts не завжди комфортно зберігати прямо в Git branches.; Branch protection має змогу вимагати:
На remote: У Git branch — це вказівник на commit.; * `git branch` показує local branches;
- `git branch -r` показує remote branches;
- `git branch -a` показує всі.; ↓
Підготовка релізу
↓
<syntaxhighlight lang="bash">
D---E feature
↓
</div>
Ознаки:
feature/payment-history
git push -u origin feature/profile-settings
git commit
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Приклад:
Git Flow добре підходив для проєктів із чіткими release cycles, але для continuous delivery іноді буває занадто важким.; git branch -D feature/login-page
'''Головна перевага:''' branch надає можливість рухатися оперативно, але не змішувати незавершену роботу зі стабільним кодом.; * Branch protection — один із найпростіших способів захистити команду від випадкового зламу main.; * Документація GitHub, GitLab і Bitbucket щодо pull requests, merge requests і branch protection.; Fork часто використовують в open source, коли contributor не має direct write access до основного repository.; '''Цікавий момент:''' хороший experimental branch має змогу бути успішним навіть тоді, коли його видалили, бо команда дізналася, що підхід не функціонує.;== Preview Environment ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
git switch main
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
'''Проста ідея:''' fast-forward merge — це ніби main “наздогнав” branch без додаткового merge commit.; '''Практична порада:''' stash зручний для короткочасного зберігання, але не варто тримати важливу роботу тільки в stash надовго.;<syntaxhighlight lang="text">
'''істотно:''' branch — інструмент.; !; відкрити pull request
git status
== Цікаві факти про Branch ==
</div>
Pull request надає можливість:
- release branch для кожної версії;
- tag-based releases;
- main завжди production-ready;
- long-term support branches;
- environment branches;
- hotfix branches.; Merge request — термін, який часто використовує GitLab.; * Branch надає можливість експериментувати без ризику для main.; * Найкращі branches часто маленькі, зрозумілі й оперативно merge-яться.; Команди:
- десятки активних branches;
- незрозуміло, що актуальне;
- великі conflicts;
- довгі code reviews;
- features місяцями не merge-яться;
- main сильно відрізняється від work branches;
- release перетворюється на болісну інтеграцію.;
git merge feature/login-page
У main зазвичай зберігають:
D---E feature
</syntaxhighlight>
переважні аспекти Branch
Розробник створює `experiment/new-search-engine`, перевіряє підхід і після тестів або переносить ідею в normal branch, або видаляє експеримент.; * Матеріали щодо code review, release management, feature flags, DevOps, secure development і version control workflows.; Суть develop branch часто застосовують, коли потрібно в Git Flow як інтеграційна гілка для майбутнього релізу.; Merge request зазвичай містить:
Hotfix branch часто створюють від стабільної production-гілки або tag.;A---B---C---F---G---D'---E' feature
== Main Branch ==
</div>
<syntaxhighlight lang="bash">
У цьому прикладі `feature-login` відгалужився від `main` після commit `C`, а потім отримав власні commits `D` і `E`.; Branches можуть впливати на безпеку.; release/2.0.0
Branch можна уявити як паралельну доріжку: ключовий код рухається своїм шляхом, а розробник тимчасово відгалужується, робить зміни, тестує їх, а потім повертає назад через merge або pull request.;</div>
git rebase main
</div>
A---B---C---F---G main
'''Rebase''' переносить commits branch на нову основу.; Локально:
=== Документація ===
</syntaxhighlight>
'''Stash''' тимчасово зберігає незакомічені зміни.; * Pull request — це не тільки технічний merge, а й інструмент командної комунікації.; Команда створює `hotfix/checkout-error`, виправляє payment issue, запускає CI й оперативно deploy-ить fix.; create hotfix branch
</div>
== Push Branch ==
</syntaxhighlight> Merge має змогу створити merge commit або пройти як fast-forward.; ↓
== Branch і Release Management ==
<syntaxhighlight lang="text">
Branches можуть бути частиною release process.; * Практики software development щодо branching strategies, Git Flow, trunk-based development і CI/CD.; Це не повна копія всього проєкту, а вказівник на певний commit.; * останній commit був давно;
- автор уже не функціонує над задачею;
- branch сильно відстав від main;
- PR неактивний;
- CI давно не запускався;
- задача втратила актуальність.;
- звідки робиться release;
- як робляться fixes;
- як backport-яться зміни;
- як ставляться tags;
- як функціонує rollback;
- хто має право merge;
- які CI checks required.;
Якщо secret потрапив у branch:
</div>
Після merge branch часто видаляють.; Приклад
== Branch і Security ==
Можливі проблеми:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<syntaxhighlight lang="text">
Моделі:
Branch — це гілка розробки в системі контролю версій, яка надає можливість ізолювати зміни, працювати паралельно, робити code review, запускати CI й безпечніше інтегрувати новий код.; Приклади:
- уникати довгоживучих branches;
- ховати незавершену feature;
- робити gradual rollout;
- тестувати в production;
- оперативно вимикати проблемну feature;
- підтримувати continuous delivery.; істотно: якщо є собою незбережені зміни, Git має змогу не дозволити перемикання або зміни можуть переїхати в інший branch.;
'''істотно:''' release branch має зменшувати ризик релізу, а не ставати місцем для хаотичного додавання нових features.; Commit фіксує зміни в поточному branch.; feature/login-page → preview-login-page.example.com '''істотно:''' merge conflict — це не катастрофа.; Приклад '''Практична роль:''' хороша назва branch одразу пояснює, навіщо він існує.; Типовий бізнес-процес:
|- | Branch | Рухомий вказівник на лінію розробки | `feature/login` |- | Tag | Мітка на конкретному commit, часто для релізу | `v1.4.0` |}
Небезпека: найпростіша помилка — внести зміни не в той branch.; git switch main
Висновок
Після цього branch стане доступним команді й можна відкрити pull request або merge request.; Не варто разом із терміновим fix додавати “ще одну маленьку feature”.;== Branch у CI Preview для Frontend ==
- Документація Git щодо branches, commits, merge, rebase і remote branches.; У Git branch є собою легким pointer на commit, з цієї причини branches оперативно створюються й активно використовуються в командній роботі.; Branches мають ризики.;
Branch відповідає одній задачі git switch main
git stash
Приклад базового Git workflow
bugfix/login-validation
- подивитися UI;
- протестувати feature;
- показати зміни product manager;
- перевірити integration;
- знайти bugs до merge;
- отримати feedback.; Треба обережно налаштовувати доступ до secrets, особливо для зовнішніх contributors.;== Створення Branch ==
Trunk-based development — workflow, де розробники часто інтегрують зміни в основну гілку, яку часто називають trunk або main.; Rebase створює нові commits з новими hashes.; Поширені помилки:
</syntaxhighlight> git switch -c feature/search
</syntaxhighlight> Практична роль: merge повертає роботу з branch назад у спільну лінію розробки.; Fork repository
git pull origin main
D---E feature
- UI review;
- дизайнерського feedback;
- product review;
- accessibility checks;
- visual regression testing;
- stakeholder demo;
- QA до merge.; * Stale branches — це цифровий пил repository.;
* стабільний код;
* готові зміни;
* production-ready версію у частині workflow;
* код після code review;
* код після проходження tests;
* основу для нових branches.; * Long-lived branches часто створюють більше проблем, ніж здається на старті.; завдяки наявності '''Практична роль:''' bugfix branch користувачі можуть виправити конкретну проблему без змішування з іншими незавершеними changes.; зробити зміни
== Branch Hell ==
deploy
</div>
git stash pop
* починається нова feature;
* потрібно виправити bug;
* потрібен hotfix;
* треба підготувати release;
* хочеться протестувати ідею;
* зміна потребує code review;
* робота займе більше одного commit;
* потрібно запустити CI окремо;
* зміна ризикована;
* ви працюєте в команді.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
git branch -a
<syntaxhighlight lang="text">
<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
'''Remote branch''' існує в remote repository, як ілюстрація на GitHub, GitLab або Bitbucket.; У багатьох нових проєктах замість `master` використовують `main`.; '''Проста думка:''' pull request — це не без ускладнень кнопка merge, а місце для перевірки, обговорення й якості.; CD має змогу:
docs/api-auth
</div>
</div>
== Local Branch і Remote Branch ==
Потрібно вручну обрати правильний варіант:
* створювати branch від актуального main;
* давати зрозумілі назви;
* робити branches короткоживучими;
* регулярно підтягувати зміни з main;
* робити маленькі pull requests;
* запускати CI;
* використовувати branch protection;
* не commit-ити secrets;
* видаляти merged branches;
* не тримати незавершену роботу місяцями;
* використовувати feature flags для довгих features;
* писати зрозумілий PR description;
* вирішувати conflicts уважно;
* мати командну branch strategy.;</div>
<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
A---B---C main
* переглянути changes;
* провести code review;
* запустити CI;
* обговорити рішення для бізнесу;
* залишити comments;
* перевірити tests;
* побачити diff;
* контролювати merge.; Проблема develop branch у деяких командах:
!; A---B---C main
Після merge:
<syntaxhighlight lang="bash">
'''Практична роль:''' pull request і merge request — різні назви для дуже схожої ідеї: контрольоване об’єднання змін.; Якщо в ньому вже три різні задачі, краще розділити роботу.; git branch
<div style="background:#f0eaff; border-left:6px solid #8e44ad; padding:12px; margin:12px 0;">
створити feature branch
'''істотно:''' branch добре версіонує код, але не завжди підходить для великих binary artifacts або datasets.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Branch рухається з новими commits.;</div>
'''Основна ідея:''' branch надає можливість працювати над змінами окремо від основної версії коду, щоб не заважати іншим і не ризикувати стабільністю проєкту.; docs/v2-migration-guide
Commit changes
== Branch і Feature Flags ==
</div>
'''Практична роль:''' feature branch — це робочий простір для конкретної задачі.; * Feature flags допомагають зменшити потребу в довгоживучих branches.; Tag зазвичай лишається на одному commit.; Перед роботою завжди корисно зробити `git status`.; Після merge branch можна видалити
== Тематичні мітки ==
== Feature Branch ==
↓
A---B---C------M main
merge to main/release
release/mobile-2.1
== Branch і Fork ==
Приклади:
* стабілізації;
* final testing;
* bug fixes перед релізом;
* version bump;
* release notes;
* deployment preparation;
* QA;
* backports.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Щоб вирішити conflict:
== Див.; додатково ==
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
Приклад:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
'''істотно:''' не робіть rebase shared branch без розуміння наслідків.; Потім приходить одразу для всіх.; * Merge conflict — не помилка Git, а сигнал, що потрібне людське рішення для бізнесу.; Недолік
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
<syntaxhighlight lang="text">
Назва branch зрозуміла
\
git add .; Інакше команда буде боротися не з багами, а з власним workflow.;== Merge ==
У новіших версіях Git часто використовують:
\
Терміновий production bug
Приклади:
Це означає, що одна й та сама частина файлу була змінена по-різному.; main branch — основна гілка repository.; Після commit branch вказує на новий commit.;Цікавий момент: branch має змогу мати власну тимчасову “живу” версію застосунку, яку можна відкрити в браузері.; Приклади:
</syntaxhighlight>
↓
Поширені префікси:
Розробник створює `feature/password-reset`, додає форму відновлення пароля, пише тести, відкриває pull request і merge-ить у main після review.;== Branch Strategy ==
git checkout -b feature/search
↓
- короткоживучі branches;
- часті merges;
- сильна CI;
- feature flags;
- small changes;
- швидкий feedback;
- main завжди має бути стабільним.; test
В open source branches використовують для:
Експеримент
'''master''' — стара традиційна назва основної гілки Git repository.;</div>
== Branch і Tags ==
feature-login: \---D
<syntaxhighlight lang="bash">
* ізолювати роботу;
* робити commits без ризику для main;
* запускати CI;
* пройти code review;
* обговорити зміни в pull request;
* об’єднати зміни тільки після готовності.; !; Підхід
Перед перемиканням варто перевірити статус:
<syntaxhighlight lang="bash">
Щоб відправити branch у remote repository:
</div>
Класична схема охоплює:
'''Помилка:''' створити branch без зайвих зусиль.; У сучасних Git-проєктах її часто називають `main`.; Після цього зазвичай створюється pull request.; docs/api-authentication
↓
</div>
До merge:
</div>
\ /
* `main` або `master`;
* `develop`;
* `feature/*`;
* `release/*`;
* `hotfix/*`.; !;</div>
Створюється `release/2.3.0`, у якому роблять final fixes, оновлюють changelog і готують deployment.; Саме з цієї причини створити branch можна майже миттєво.; Або старіший варіант:
Push branch to fork
- завершені features;
- bug fixes;
- зміни для наступної версії;
- інтеграційні зміни.; * deploy preview для feature branch;
- deploy staging для release branch;
- deploy production після merge в main;
- запускати rollback workflows.; A---B---C---D---E main
Але в командній роботі branch або PR часто все одно корисний для review і history.; Branches використовують для:
Commit у Branch
- це дуже маленький solo project;
- зміна дрібна й безризикова;
- команда функціонує trunk-based із прямими small commits;
- є собою сильна CI й pair programming;
- зміна лише локальна й не буде збережена;
- це тимчасова правка, яку краще зробити через stash.;
істотно: fork має змогу містити власні branches.;
</syntaxhighlight> Branch має змогу бути зайвим, якщо:
</syntaxhighlight>
- працювати прямо в main;
- забути, в якому branch зараз знаходишся;
- створити branch від застарілої main;
- називати branch `test`, `new`, `fix`, `my-branch`;
- не push-ити branch і втратити роботу;
- тримати branch занадто довго;
- боятися merge conflict;
- робити величезний pull request;
- rebase shared branch без розуміння;
- видалити branch із незмердженою роботою;
- commit-ити secrets;
- не запускати tests перед merge;
- не оновлювати branch перед review;
- плутати branch і tag;
- плутати branch і fork.; Водночас вони потребують дисципліни: зрозумілі назви, короткий життєвий цикл, регулярна інтеграційні функціональні можливості, branch protection, CI checks і обережне вирішення conflicts.; A---B---C main
Не можна commit-ити secrets у branch.; Перед switch краще зробити commit або stash.;== Branch Protection ==
- long-lived branches;
- merge conflicts;
- branch hell;
- stale branches;
- складні releases;
- дублювання роботи;
- CI не запускається;
- секрети в branch;
- неперевірені direct pushes;
- незрозумілі назви;
- багато незавершених PR;
- відставання від main;
- важке code review;
- залежність від однієї людини.;
Цікавий факт
Добрі назви branches допомагають команді розуміти контекст.; Це різні рівні організації роботи.; Проблеми long-lived branches:
git push origin --delete feature/login-page
prototype/new-dashboard
CI має змогу запускати для branch:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
PR описує що і навіщо змінено
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
Branches особливо корисні для features, bug fixes, hotfixes, releases, experiments і documentation changes.; '''Практична роль:''' якщо в одному проєкті основна гілка називається `main`, а в іншому `master`, це не змінює саму ідею branch — змінюється лише назва.; '''Bugfix branch''' — гілка для виправлення помилки.; Потрібно визначити:
|- | Merge | Зберігає реальну історію об’єднань | історичний розвиток має змогу бути більш “гіллястою” |- | Rebase | Робить історію лінійнішою | Переписує commits і має змогу заплутати команду при неправильному використанні |}
Нова функція
feature/login-page
git branch -d feature/login-page
Short-Lived Branch
local: feature/login-page
Branch Naming Conventions
</syntaxhighlight>
Branch і fork теж різні.;
git pull origin main
Git без ускладнень пересуває pointer main вперед.; Для деяких команд краще trunk-based development або простіша модель.; Складніше — вчасно інтегрувати його назад або чесно видалити.;
Підказка: branch має відповідати одній зрозумілій задачі.;== Hotfix Branch ==
- видалити файл недостатньо;
- потрібно rotate secret;
- перевірити history;
- перевірити logs і CI;
- за потреби переписати history;
- повідомити команду безпеки.;</syntaxhighlight>
Це комфортно для:
Практична роль: commit — це збережений крок у межах branch.; * experiment code;
- feature engineering;
- model training scripts;
- notebooks;
- pipeline changes;
- evaluation logic;
- documentation;
- model deployment code.;
Такі branches можуть ніколи не потрапити в main.; git checkout main
Feature branch — гілка для розробки нової функції.; backport if needed
Develop Branch
Вони дозволяють:
- source branch;
- target branch;
- description;
- commits;
- diff;
- comments;
- approvals;
- CI results;
- merge options.;
Проста різниця: local branch живе у вас, remote branch — у спільному repository.; Branch не відстав сильно від main
↓
hotfix/security-token <<<<<<< HEAD const title = "Home";
=
const title = "Dashboard"; >>>>>>> feature/dashboard-title
refactor/order-service
Приклад checklist для Branch
Проста аналогія: branch — це закладка в історії коду, яка рухається вперед разом із новими commits.; Release branch має змогу використовуватися для: Практична думка: merge краще показує, як гілки сходилися, а rebase робить історію чистішою для читання.; Branch вирішує цю проблему цивілізовано: замість хаосу з копіями Git зберігає історію змін і надає можливість створювати багато ліній роботи в одному repository.; У командній розробці це надає можливість кільком людям одночасно працювати над різними задачами.; git commit -m "Add login form" </syntaxhighlight> переважні аспекти:
Приклад вирішення merge conflict
- У Git branch — це легкий pointer на commit, а не повна копія repository.;
Практична роль: branch надає можливість contributor-у запропонувати зміни без прямого доступу до основного repository.; git switch main
- відкрити файл;
- вибрати правильний варіант або поєднати зміни;
- видалити conflict markers;
- протестувати код;
- зробити commit.; У data science і machine learning branches використовують для:
experiment/react-compiler
release/2026-05
- edit files
Приклад: Приклад:
Найлюдяніший факт: branch — це як чернетка в зошиті: можна помилятися, виправляти, показати іншим і тільки потім переписати в чистовик.; І це нормально: їхня цінність — навчання й перевірка ідеї.; Тести проходять
- main відстає від реальної роботи;
- develop стає нестабільним;
- release process ускладнюється;
- continuous deployment стає важчим.; {| class="wikitable"
fix/date-format
Branch і Secrets
== Ризики Branch ==
feature/user-profile
* менше conflicts;
* швидший feedback;
* простіший review;
* ближче до main;
* легше підтримувати CI;
* менший ризик великого integration pain.;<syntaxhighlight lang="bash">
</syntaxhighlight>
- API keys;
- passwords;
- private keys;
- tokens;
- cloud credentials;
- database URLs із паролем;
- signing keys;
- OAuth secrets.;== Коли варто створювати Branch ==
git commit -m "Add profile settings page"
</syntaxhighlight> Схематично:
Experimental Branch
Приклади:
'''Перевага:''' branch надає можливість команді працювати паралельно, але зберігати контроль над тим, що потрапляє в ключовий код.; Приклад створення:
!; Це сприяє:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
* ізоляція змін;
* паралельна робота;
* безпечні експерименти;
* code review;
* CI checks;
* легше release management;
* супровід hotfixes;
* чистіша історичний розвиток задач;
* контроль merge;
* краще командне workflow;
* можливість preview environments;
* супровід open source contributions;
* зменшення ризику для main.; push branch
</div>
перевірки ідеї забезпечується через Experimental branch — гілка; додатково реалізовано proof of concept або ризикової зміни.; Практична порада: періодично чистіть stale branches, але перед видаленням переконайтеся, що в них немає цінної роботи.; Проста думка: trunk-based development намагається уникати довгого життя змін у відриві від основного коду.; Практична роль: checklist сприяє зробити branch не без ускладнень місцем для коду, а чистою частиною командного workflow.; Приклад:
↓
Практична роль: якщо код змінюється в branch, документація до нього теж має змогу змінюватися в з цієї причини самому branch.; * `main` і `master` можуть виконувати ту саму роль, але в різних проєктах називатися по-різному.; Preview environment — тимчасове середовище, створене для branch або pull request.; Hotfix branch — гілка для термінового виправлення production-проблеми.; це окрема лінія розвитку коду в системі контролю версій виступає ключовою рисою Branch або гілка.; До rebase:
Branch у Git
\
git add .; git switch feature/login-page
Merge Conflict
Branch і Stash
release/docs-1.5
'''Release branch''' — гілка для підготовки релізу.; Створити нову гілку можна командою:
== Branch у Data і ML-проєктах ==
'''Практична порада:''' краще робити кілька малих branches і PR, ніж один branch на 300 файлів.; Його не треба створювати ритуально для кожного символу, але для більшості командних змін він дуже корисний.; ↓
'''Merge conflict''' виникає, коли Git не має змогу автономно об’єднати зміни.; * pull request перед merge;
* code review;
* passing CI checks;
* no direct push;
* signed commits;
* up-to-date branch;
* required approvals;
* status checks;
* restricted users;
* linear history;
* security scans.; Поняття
Fast-Forward Merge
bugfix/profile-avatar
Перемикання між Branches
Після fast-forward:
hotfix/broken-checkout Short-lived branch — гілка, яка живе недовго й оперативно merge-иться.; Конфлікт можна вирішити синтаксично правильно, але логічно неправильно.; Branch hell — ситуація, коли branches стало занадто багато, вони живуть занадто довго, часто конфліктують і важко інтегруються.;</syntaxhighlight>
- small pull requests;
- trunk-based development;
- feature flags;
- continuous integration;
- частими releases.;</syntaxhighlight>
Stale Branch
git checkout main
Приклад:
Branches корисні не тільки для коду, а й для документації.; Потрібно контролювати:
істотно: main branch не варто використовувати як місце для випадкових експериментів.; feature/search-filters
Основні переважні аспекти branches:
!; git branch feature/search Практична порада: якщо зміна не має потрапити в main прямо зараз, краще зробити branch.; Перевага git switch -c feature/profile-settings
</syntaxhighlight>
</syntaxhighlight>
Приклади назв:
істотно: branch strategy має відповідати release strategy.;'''Branch protection''' — правила, які захищають важливі branches, як ілюстрація `main`.; До нормального version control розробники часто створювали копії папок із назвами на кшталт `project-final`, `project-final-2`, `project-real-final`, `project-final-fixed`.; Production bug found
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Схематично:
'''Критично:''' hotfix має бути маленьким і сфокусованим.; code review і CI checks
'''Головна думка:''' branch — це безпечна робоча зона для змін.; Найчастіше цей термін використовують у '''Git''', де branch надає можливість розробнику працювати над новою функцією, виправленням помилки, експериментом або релізом, не ламаючи основну стабільну версію проєкту.; git branch
</div>
== Хороші практики Branch ==
== Merge Request ==
Branch варто створювати, якщо:
git push -u origin feature/login-page
Ідеї:
|-
| Branch
| Гілка всередині repository
| `feature/search`
|-
| Fork
| Окрема копія repository в іншому namespace/account
| fork open source project на GitHub
|}
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
</div>
</div>
'''Практична роль:''' видалення merged branches підтримує роботу repository чистим і зрозумілим.; Rebase переписує історію commits.; '''Небезпека:''' branch hell часто з’являється, коли команда відкладає інтеграцію “на потім”.; Воно надає можливість:
</syntaxhighlight>
Типовий contributor workflow: Найлюдяніший факт: branch — це спосіб сказати: “Я хочу спробувати зміну, але не хочу одразу ламати все для команди”.; За змістом він дуже схожий на pull request.; Для цього часто використовують окреме versioning або artifact storage.; Критично: branch із pull request має змогу запускати CI.; * оновлювати docs разом із feature;
- готувати release notes;
- тримати docs для різних версій;
- review-ити documentation changes;
- генерувати preview docs;
- підтримувати long-term versions.; * складні merge conflicts;
- відставання від main;
- важке code review;
- прихована інтеграційна проблема;
- CI перевіряє застарілу основу;
- велика різниця з production;
- складніше rollback;
- ризик “branch hell”.;
Merge vs Rebase
Branch і CI/CD
Create branch
!; Поняття
merge назад у main
</div>
'''Практична роль:''' створення branch — це перший крок перед ізольованою роботою над задачею.; '''Branch strategy''' — правила команди щодо створення, використання й об’єднання branches.; Ознаки:
release/1.4.0
'''Fast-forward merge''' можливий, коли target branch не має нових commits після створення feature branch.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
'''Pull request''' або '''PR''' — запит на об’єднання змін із branch в іншу гілку, зазвичай у `main`.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Приклад:
</div>
Commits мають зрозумілі повідомлення
* `feature/`;
* `bugfix/`;
* `hotfix/`;
* `release/`;
* `docs/`;
* `chore/`;
* `refactor/`;
* `test/`;
* `experiment/`.; git checkout -b feature/login-page
'''Критично:''' main branch без protection без зайвих зусиль випадково зламати direct push-ем або неперевіреною зміною.; '''істотно:''' чим довше branch живе окремо, тим дорожче його потім інтегрувати.;== Master Branch ==
Немає secrets
'''Критично:''' якщо secret був у Git branch, вважайте його скомпрометованим, навіть якщо branch потім видалили.; git add .; '''Long-lived branch''' — гілка, яка існує довго й накопичує багато змін.; Приклад:
hotfix/payment-timeout
Merge — об’єднання змін із однієї гілки в іншу.;'''Local branch''' існує на комп’ютері розробника.;</div>
fix bug
Якщо виник conflict:
'''Feature flags''' дозволяють merge-ити код у main, але вмикати функцію окремо.;== Git Flow ==
D---E feature-login
Перемикання на іншу гілку:
'''Git Flow''' — branching model із кількома типами branches.; Коли створюється новий commit у branch, branch починає вказувати на цей новий commit.; Frontend-команди часто створюють preview deployment для кожного branch або pull request.; Це Git чесно каже: “Я не знаю, яку версію ти хочеш залишити”.; Найцікавіше, що branch у Git зазвичай дуже легкий.; feature/user-settings
== Типові помилки початківців ==
* contributions;
* pull requests;
* bug fixes;
* experiments;
* release maintenance;
* version support;
* documentation updates.; '''Branch''' і '''tag''' — різні речі.; '''Практична роль:''' push робить вашу гілку видимою не тільки локально.;== Приклади сценаріїв використання ==
== Deleting Branch ==
Branch створено від актуального main
</div>
== Джерела ==
</div>
== Branch у Documentation ==
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<syntaxhighlight lang="text">
\
↓
{| class="wikitable"
Рекомендовано:
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
Типовий сценарій:
hotfix/security-header
main: A---B---C
'''істотно:''' Git Flow не є собою єдиним правильним workflow.; Bugfix branch зазвичай короткоживучий: помилку виправили, тести пройшли, branch merged, branch видалили.; Після rebase:
!;
Trunk-Based Development
</syntaxhighlight>
- яка гілка основна;
- коли створювати feature branch;
- як називати branches;
- хто має змогу merge;
- чи потрібен PR;
- які CI checks required;
- як робити releases;
- як робити hotfixes;
- коли видаляти branches;
- як працювати з long-lived work;
- чи використовувати feature flags.;== Long-Lived Branch ==
git pull origin main
Практична роль: цей workflow створює branch від актуальної main, фіксує зміни й відправляє їх у remote repository.; Суть
main
↓Branches тісно пов’язані з CI/CD.;
↓
Потім:
</div>
↓
'''істотно:''' після conflict обов’язково запускайте tests.; Окремо варто відзначити а й для інших людей і CI/CD.; git switch feature/profile-settings
== Pull Request ==
'''Практична роль:''' feature flag надає можливість відокремити merge коду від запуску функції для користувачів.; D--E
!; Він має допомагати команді швидше й чистіше інтегрувати код, а не створювати хаос із десятків забутих гілок.;== Загальний характеристика ==
Rebase
<syntaxhighlight lang="bash">
Практична роль: CI/CD перетворює branch не без ускладнень на місце для коду, а на перевірюваний кандидат для merge або release.;Приклади назв:
- Git
- Version Control
- Source Control
- Commit
- Merge
- Rebase
- Pull Request
- Merge Request
- Merge Conflict
- Main Branch
- Feature Branch
- Hotfix Branch
- Release Branch
- Git Flow
- Trunk-Based Development
- CI/CD
- Code Review
- Branch Protection
- Tag
- Fork
- DevOps
- Software Development
- Документація
У develop можуть потрапляти: