Пошук уроків, статей та іншого контенту
Розглянете призначення гілок, покажчик HEAD і переваги ізольованої розробки в Git.
Гілка (branch) у Git — це окремий напрям розробки. Вона дає змогу змінювати код, не впливаючи безпосередньо на іншу гілку.
Найчастіше в репозиторії є основна гілка:
main — поточна основна гілка;
feature/login — гілка для розробки входу користувача;
bugfix/header — гілка для виправлення помилки.
Назви гілок — це лише домовленість команди. Git не надає їм спеціального значення, крім того, що кожна гілка вказує на певний коміт.
Без гілок усі зміни потрапляли б в один спільний ланцюжок комітів. Це незручно, коли потрібно:
розробляти кілька функцій одночасно;
експериментувати з ідеєю;
виправляти помилку, не перериваючи поточну роботу;
підготувати зміни для перевірки перед об’єднанням з основною гілкою;
дозволити кільком розробникам працювати незалежно.
Наприклад, основна гілка містить стабільну версію програми. Для нової функції створюють окрему гілку:
main
└── feature/searchЗміни у feature/search не змінюють main, поки ці гілки не об’єднають.
Гілка — це не повна копія проєкту. У Git гілка є легким покажчиком на коміт.
Уявімо ланцюжок комітів:
A --- B --- C
^
mainГілка main вказує на коміт C.
Якщо створити нову гілку в цей момент:
A --- B --- C
^ ^
main featureОбидві гілки спочатку вказують на той самий коміт. Після нового коміту в feature покажчики розійдуться:
A --- B --- C --- D
^ ^
main featureГілка main залишилася на коміті C, а feature пересунулася на новий коміт D.
Створення гілки саме по собі не створює нового коміту і не копіює файли. Git лише створює новий покажчик.
mainПісля створення репозиторію Git зазвичай використовує гілку main як основну. У старіших репозиторіях основна гілка могла називатися master.
Переглянути поточні гілки можна командою:
git branchПриклад результату:
* mainСимвол * показує поточну гілку.
Щоб створити гілку, використовуйте:
git branch feature/searchЦя команда створює гілку, але не перемикає на неї. Поточна гілка залишається тією самою.
Перейти на вже створену гілку можна командою:
git switch feature/searchПеревірити результат:
git branch* feature/search
mainТепер нові коміти створюватимуться в feature/search.
Найчастіше нову гілку створюють і відразу роблять поточною:
git switch -c feature/searchОпція -c означає: створити гілку та перейти на неї.
Старіший варіант цієї команди:
git checkout -b feature/searchДля нових команд рекомендовано використовувати git switch, оскільки ця команда спеціально призначена для роботи з гілками.
HEADHEAD — це спеціальний покажчик, який показує, де саме зараз перебуває Git.
Зазвичай HEAD вказує на поточну гілку:
HEAD
|
v
main
|
v
CУ цьому випадку:
поточна гілка — main;
HEAD вказує на main;
main вказує на останній коміт C;
новий коміт буде додано після C.
Після переходу до іншої гілки HEAD змінює своє положення:
HEAD
|
v
feature
|
v
A --- B --- C --- D
^
mainПеревірити поточну гілку можна так:
git branch --show-currentПодивитися, на який коміт вказує HEAD:
git log -1 --onelineТакож поточну гілку і стан HEAD показує команда:
git statusПриклад:
On branch feature/search
nothing to commit, working tree cleanТиповий процес розробки нової функції:
Перейти до основної гілки.
Отримати її актуальний стан.
Створити нову гілку.
Внести зміни.
Створити коміти у новій гілці.
Перевірити результат.
Пізніше об’єднати гілку з основною.
Приклад команд:
git switch main
git switch -c feature/profile
# Після змін у файлах
git add .
git commit -m "Add user profile"
# Перегляд гілок і останніх комітів
git log --oneline --decorate --graph --allПоки ви перебуваєте у feature/profile, коміт не змінює покажчик main.
Схематично це виглядає так:
feature/profile
^
|
A --- B --- C --- D
^
|
mainЦе і є ізольована розробка: функція розвивається окремо, а стабільна гілка залишається без нових незавершених змін.
Наведена послідовність створює локальний репозиторій, додає коміти та показує роботу двох гілок:
#!/usr/bin/env bash
set -e
# Створення нового тестового репозиторію
rm -rf git-branches-demo
mkdir git-branches-demo
cd git-branches-demo
git init -b main
# Створення першого файлу та коміту
printf "# Demo project\n" > README.md
git add README.md
git commit -m "Initial commit"
# Створення окремої гілки для нової функції
git switch -c feature/greeting
# Додавання змін лише в новій гілці
printf "\necho 'Hello!'\n" >> README.md
git add README.md
git commit -m "Add greeting"
# Показ поточної гілки та історії
git status
git log --oneline --decorate --graph --all
# Повернення до основної гілки
git switch main
# У main зміни з feature/greeting ще не видно
cat README.mdПісля перемикання на main файл не містить рядка echo 'Hello!', тому що цей коміт існує лише в feature/greeting.
У різних версіях Git текст службових повідомлень може трохи відрізнятися, але принцип роботи залишається тим самим.
Для переходу між гілками використовуйте:
git switch main
git switch feature/greetingПеред перемиканням Git змінює робочі файли відповідно до стану вибраної гілки.
Якщо у робочих файлах є незбережені зміни, Git може заборонити перемикання. Це захищає зміни від випадкової втрати. Спочатку потрібно:
створити коміт;
тимчасово зберегти зміни;
або скасувати їх, якщо вони більше не потрібні.
Показати локальні гілки:
git branchПоказати гілки разом з останнім комітом кожної:
git branch -vПоказати історію всіх гілок:
git log --oneline --decorate --graph --allПриклад:
* 8a31f20 (HEAD -> feature/search) Add search form
| 51bc2d1 (main) Initial commitТут:
HEAD -> feature/search означає, що поточна гілка — feature/search;
feature/search вказує на коміт 8a31f20;
main вказує на попередній коміт 51bc2d1.
Щоб переглянути зміни між двома гілками, використовуйте:
git diff main..feature/searchЦе показує відмінності між станами main і feature/search.
Щоб побачити коміти, які є у feature/search, але відсутні в main:
git log main..feature/search --onelineТак можна перевірити роботу гілки до її об’єднання з основною.
Після завершення роботи локальну гілку можна видалити:
git branch -d feature/searchОпція -d видаляє гілку лише тоді, коли Git вважає її зміни вже об’єднаними або непотрібними.
Примусове видалення виконується так:
git branch -D feature/searchВикористовуйте -D обережно: незлиті коміти цієї гілки можуть стати недоступними через звичайні покажчики Git.
Не можна видалити поточну гілку. Спочатку потрібно перейти на іншу:
git switch main
git branch -d feature/searchДля невеликих навчальних або командних проєктів часто використовують такі назви:
feature/user-profile
feature/search
bugfix/login-error
docs/readmeПрефікс описує призначення гілки:
feature/ — нова функція;
bugfix/ — виправлення помилки;
docs/ — зміни документації.
Це не вимога Git, а спосіб зробити список гілок зрозумілішим.
Команда:
git branch feature/searchлише створює гілку. Щоб почати працювати в ній, потрібно виконати:
git switch feature/searchАбо використати одну команду:
git switch -c feature/searchНова гілка створюється від поточного коміту. Якщо ви перебуваєте не в main, результат може бути не таким, як очікувалося.
Перед створенням гілки перевірте:
git branch --show-current
git statusГілка — це покажчик на коміт, а не окрема повна копія проєкту. Саме тому створення гілок у Git зазвичай швидке й не займає багато додаткового місця.
Перед створенням коміту перевіряйте поточну гілку:
git statusАбо:
git branch --show-currentЦе допомагає не додати функцію випадково до main.
HEAD і гілкоюHEAD зазвичай вказує на поточну гілку, а сама гілка — на останній коміт. Тому перемикання гілки змінює положення HEAD, а створення нового коміту пересуває покажчик поточної гілки вперед.
Гілка — це окремий напрям розробки та покажчик на коміт.
Гілки дають змогу ізолювати нові функції, виправлення й експерименти.
Основна гілка часто називається main.
git switch -c name створює гілку та одразу перемикає на неї.
HEAD показує поточне положення Git, зазвичай через поточну гілку.
Коміти в одній гілці не змінюють іншу гілку автоматично.
Команди git branch, git switch, git status і git log --graph допомагають керувати гілками та розуміти їхню історію.