Пошук уроків, статей та іншого контенту
Організуйте розробку функцій в окремих гілках із подальшим об’єднанням змін у головну гілку.
Feature Branch Workflow — це підхід до роботи з Git, у якому кожну нову функцію розробляють в окремій гілці.
Замість того щоб змінювати main безпосередньо, розробник:
Оновлює локальну гілку main.
Створює гілку для нової функції.
Виконує зміни та створює коміти.
Об’єднує функціональну гілку з main.
Видаляє гілку, яка більше не потрібна.
Наприклад, для функції авторизації можна створити гілку:
feature/user-authenticationГілка main при цьому залишається стабільною та містить готовий код.
mainmain — головна гілка репозиторію. Зазвичай у ній зберігається код, який можна використовувати або передавати далі.
Не варто починати розробку нової функції безпосередньо в main, якщо команда використовує Feature Branch Workflow.
Функціональна гілка створюється для конкретного завдання:
feature/search
feature/user-profile
feature/payment-formНазва має коротко описувати функцію. Поширений формат — префікс feature/ та назва через дефіс.
Гілка створюється на основі актуального стану main.
Припустімо, потрібно додати форму пошуку.
git statusКоманда показує:
поточну гілку;
незбережені зміни;
файли, які ще не додані до коміту.
Перед переходом на іншу гілку бажано зберегти або скасувати локальні зміни.
maingit switch mainЯкщо у вашій версії Git немає команди git switch, можна використати старішу форму:
git checkout mainЯкщо репозиторій має віддалений репозиторій, наприклад origin, оновіть локальну гілку:
git pull origin mainЦе завантажить зміни з віддаленої гілки main та об’єднає їх із локальною.
git switch -c feature/searchКоманда:
створює гілку feature/search;
одразу перемикається на неї.
Перевірити поточну гілку можна так:
git branchСимвол * позначає активну гілку:
main
* feature/searchНаприклад, створіть файл search.js:
function searchProducts(products, query) {
const normalizedQuery = query.trim().toLowerCase();
return products.filter((product) =>
product.name.toLowerCase().includes(normalizedQuery)
);
}
const products = [
{ name: "Keyboard" },
{ name: "Mouse" },
{ name: "Monitor" }
];
console.log(searchProducts(products, "mouse"));Результат виконання:
[ { name: 'Mouse' } ]Перед комітом перевірте зміни:
git status
git diffДодайте файл до індексу:
git add search.jsСтворіть коміт із коротким описом:
git commit -m "Add product search"Коміт має описувати завершену логічну зміну. Не обов’язково чекати завершення всієї функції, якщо зміни можна безпечно розділити на кілька зрозумілих комітів.
Перед об’єднанням гілки перевірте, що код працює:
node search.jsТакож можна переглянути історію комітів:
git log --onelinemainСпочатку поверніться до головної гілки:
git switch mainПісля цього об’єднайте функціональну гілку:
git merge feature/searchЯкщо конфліктів немає, Git завершить об’єднання автоматично.
Перевірте результат:
git log --oneline --graph --allПісля успішного об’єднання гілка більше не потрібна локально:
git branch -d feature/searchПараметр -d видаляє гілку лише тоді, коли Git бачить, що її зміни вже об’єднані.
main на віддалений репозиторійgit push origin mainТепер функція доступна у віддаленій гілці main.
Нижче наведено типовий сценарій від початку до завершення:
# Перейти до головної гілки
git switch main
# Отримати останні зміни
git pull origin main
# Створити гілку для нової функції
git switch -c feature/search
# Після редагування файлів перевірити зміни
git status
git diff
# Додати змінені файли
git add search.js
# Створити коміт
git commit -m "Add product search"
# Повернутися до головної гілки
git switch main
# Об'єднати функціональну гілку
git merge feature/search
# Видалити локальну функціональну гілку
git branch -d feature/search
# Відправити оновлену головну гілку
git push origin mainКоментарі в цьому прикладі описують дії українською, але самі команди Git залишаються без змін.
Конфлікт виникає, коли main і функціональна гілка змінили один і той самий фрагмент файлу по-різному.
Під час об’єднання Git може показати повідомлення про конфлікт:
CONFLICT (content): Merge conflict in app.jsПеревірте файли з конфліктами:
git statusУ файлі конфлікт позначається спеціальними маркерами:
<<<<<<< HEAD
const title = "Products";
=======
const title = "All products";
>>>>>>> feature/searchПотрібно вручну залишити правильний варіант і видалити маркери:
const title = "All products";Після виправлення:
git add app.js
git commit -m "Resolve merge conflict"Якщо потрібно скасувати об’єднання до його завершення:
git merge --abortЦе поверне репозиторій до стану перед початком git merge.
Якщо потрібно зберегти функціональну гілку на віддаленому репозиторії або передати її на перевірку, виконайте:
git push -u origin feature/searchПараметр -u встановлює зв’язок між локальною та віддаленою гілками. Надалі достатньо виконувати:
git pushПісля завершення роботи зміни можна об’єднати в main безпосередньо або через запит на об’єднання, якщо це передбачено правилами команди.
Створюйте нову функціональну гілку від актуальної версії main.
Використовуйте зрозумілі назви, наприклад feature/user-profile.
Робіть коміти невеликими та логічно завершеними.
Не додавайте до функціональної гілки зміни, які не стосуються її завдання.
Перед об’єднанням перевіряйте код і тести.
Не видаляйте гілку, якщо в ній є незбережені або ще не об’єднані зміни.
Перед об’єднанням переконайтеся, що перебуваєте саме в main.
mainЯкщо локальний main давно не оновлювався, нова гілка може бути створена на основі старого коду.
Перед створенням гілки виконайте:
git switch main
git pull origin mainПеред редагуванням файлів перевіряйте:
git branch --show-currentЦе допоможе не внести зміни випадково в main або іншу функціональну гілку.
Повідомлення на кшталт changes або update не пояснюють, що саме змінилося.
Краще:
git commit -m "Add product search"Команда:
git branch -d feature/searchзазвичай захищає від видалення гілки з необ’єднаними змінами. Не використовуйте примусове видалення без упевненості, що зміни більше не потрібні.
Перед git merge перевірте стан:
git statusСпочатку закомітьте потрібні зміни або скористайтеся іншим дозволеним способом їх тимчасового збереження.
Feature Branch Workflow ізолює розробку кожної функції від головної гілки.
Основний цикл:
main → feature-гілка → коміти → merge у main → видалення feature-гілкиКлючові команди:
git switch main
git pull origin main
git switch -c feature/name
git add .
git commit -m "Describe the change"
git switch main
git merge feature/name
git branch -d feature/name
git push origin mainТакий підхід допомагає зберігати main стабільною, розділяти різні завдання та безпечніше об’єднувати зміни.