Пошук уроків, статей та іншого контенту
Створюватимете гілки для ізольованої роботи над функціями й безпечно перемикатиметеся між ними.
Гілка Git — це рухомий покажчик на певний коміт. Вона дає змогу ізолювати зміни, не втручаючись у код іншої гілки.
Зазвичай основна гілка називається main. Для нової функції створюють окрему гілку, наприклад:
feature/user-profile
feature/search
bugfix/login-validation
Коли ви створюєте нову гілку, її початкове положення відповідає поточному коміту. Подальші коміти в цій гілці не змінюють інші гілки.
Щоб переглянути локальні гілки, виконайте:
git branch feature/search
* mainСимвол * показує поточну гілку.
Для перегляду гілок разом із останнім комітом використовуйте:
git branch -vПереглянути поточний стан репозиторію можна командою:
git statusВона покаже:
поточну гілку;
змінені файли;
файли, підготовлені до коміту;
невідстежувані файли;
чи відстає або випереджає ваша гілка іншу гілку.
Команда git branch створює гілку, але не перемикає вас на неї:
git branch feature/searchПісля цього гілка існуватиме, але поточною залишиться попередня гілка.
Переконатися в цьому можна так:
git branchЩоб одразу створити гілку та перейти на неї, використовуйте:
git switch -c feature/searchОпція -c означає «створити нову гілку».
Це найзручніший спосіб почати роботу над новою функцією:
git switch main
git pull
git switch -c feature/searchУ цьому прикладі:
виконується перехід на main;
локальна main оновлюється;
створюється feature/search на основі актуального стану main;
поточною стає feature/search.
Команда git pull потрібна лише тоді, коли ви працюєте із віддаленим репозиторієм і хочете отримати його актуальні зміни.
Для переходу на вже створену гілку використовуйте:
git switch feature/searchПісля перемикання Git оновлює робочу директорію відповідно до стану цієї гілки.
Наприклад:
git switch main
git switch feature/searchПісля першої команди ви працюєте з файлами з main, після другої — з файлами з feature/search.
Перевірити результат можна за допомогою:
git statusУ першому рядку буде вказано поточну гілку:
On branch feature/searchЯкщо гілка має довгу назву, її потрібно вказувати повністю:
git switch feature/user-profileGit не завжди може однозначно визначити гілку за частиною назви, тому не покладайтеся на скорочення.
Припустімо, у вас є репозиторій із гілкою main. Ви хочете додати пошук товарів.
# Перевіряємо поточний стан репозиторію
git status
# Переходимо на основну гілку
git switch main
# Створюємо гілку для нової функції та одразу перемикаємося на неї
git switch -c feature/product-search
# Перевіряємо, що працюємо в новій гілці
git branch
# Після внесення змін додаємо потрібні файли
git add src/search.js
# Створюємо коміт у гілці функції
git commit -m "Add product search"
# Повертаємося до основної гілки
git switch main
# Знову переходимо до роботи над функцією
git switch feature/product-searchКоміт Add product search належить гілці feature/product-search. Він не з’являється в історії main, доки ви окремо не об’єднаєте гілки.
Під час перемикання Git намагається зберегти незакомічені зміни у робочій директорії. Якщо зміни не конфліктують із файлами цільової гілки, перемикання може відбутися успішно.
Проте Git заблокує перемикання, якщо воно може перезаписати ваші незбережені зміни:
error: Your local changes to the following files would be overwritten by checkoutПеред перемиканням перевіряйте стан:
git statusЄ три безпечні варіанти дій.
Якщо зміни вже завершені або утворюють логічну частину роботи, створіть коміт:
git add .
git commit -m "Implement search input"
git switch mainКоміт зберігає зміни в поточній гілці, після чого перемикання стає безпечнішим.
Якщо зміни ще не готові до коміту, скористайтеся git stash:
git stash push -m "WIP: product search"
git switch mainЗміни з робочої директорії буде тимчасово прибрано, але Git збереже їх у сховищі stash.
Щоб переглянути відкладені набори змін:
git stash listЩоб повернути останній набір змін:
git stash popЗазвичай послідовність виглядає так:
# Перевіряємо стан перед перемиканням
git status
# Тимчасово зберігаємо незавершену роботу
git stash push -m "WIP: search filters"
# Перемикаємося на іншу гілку
git switch main
# Повертаємося до гілки функції
git switch feature/product-search
# Відновлюємо незавершені зміни
git stash popПісля git stash pop можуть виникнути конфлікти, якщо файли в поточній гілці змінилися. У такому разі Git позначить конфліктні місця, які потрібно виправити вручну.
Якщо зміни більше не потрібні, їх можна скасувати. Для окремого файлу:
git restore src/search.jsДля всіх змінених відстежуваних файлів:
git restore .Ця дія незворотно видаляє незакомічені зміни у вказаних файлах. Перед її виконанням переконайтеся, що вони справді не потрібні.
Нова гілка створюється від поточного коміту поточної гілки. Тому важливо спочатку перейти на правильну основу.
Наприклад, нову функцію потрібно почати від main:
git switch main
git switch -c feature/notificationsЯкщо створити її, перебуваючи у feature/search, вона почнеться від стану feature/search:
git switch feature/search
git switch -c feature/notificationsУ такому разі нова гілка може містити коміти пошуку, навіть якщо це не було заплановано.
Якщо ви помилилися в назві гілки, її можна перейменувати:
git branch -m feature/product-searchКоманда -m перейменовує поточну гілку.
Наприклад:
git switch -c feautre/search
git branch -m feature/searchПісля перейменування перевірте результат:
git branchПісля завершення роботи гілку можна видалити локально:
git branch -d feature/product-searchОпція -d видаляє гілку лише тоді, коли Git вважає її зміни вже інтегрованими в іншу гілку.
Якщо потрібно примусово видалити гілку разом із незлитими комітами, використовуйте:
git branch -D feature/product-searchБудьте обережні: коміти, доступні лише з цієї гілки, можна втратити.
Не можна видалити поточну гілку. Спочатку перейдіть на іншу:
git switch main
git branch -d feature/product-searchgit switch і старий синтаксис git checkoutУ старих проєктах часто зустрічається команда:
git checkout -b feature/searchВона одночасно створює гілку та перемикається на неї. Для переходу на наявну гілку використовували:
git checkout feature/searchСучасний Git рекомендує розділяти операції:
git switch — для роботи з гілками;
git restore — для відновлення файлів.
Тому для нової роботи краще використовувати:
git switch -c feature/search
git switch feature/searchЦе зрозуміліше, ніж універсальна команда git checkout, яка історично виконувала кілька різних завдань.
Команда:
git branch feature/searchлише створює гілку. Якщо після цього почати редагувати файли, зміни все ще належатимуть поточній гілці.
Правильний варіант:
git switch -c feature/searchАбо окремо:
git branch feature/search
git switch feature/searchЯкщо ви перебуваєте в іншій функціональній гілці, нова гілка успадкує її поточний стан.
Перед створенням перевірте:
git status
git branchПотім перейдіть на потрібну основу:
git switch main
git switch -c feature/new-taskНе перемикайтеся навмання, якщо git status показує важливі зміни. Спочатку:
створіть коміт;
або використайте git stash;
або свідомо скасуйте непотрібні зміни.
Команда git branch -D може видалити єдину гілку, у якій зберігаються потрібні коміти. Перед примусовим видаленням переконайтеся, що робота більше не потрібна або вже перенесена в інше місце.
Коміт створюється в поточній гілці. Якщо ви забули перемкнутися на гілку функції, коміт потрапить у main або іншу поточну гілку.
Перед комітом перевіряйте:
git statusgit branch показує локальні гілки.
git branch <name> створює гілку, але не перемикає на неї.
git switch -c <name> створює гілку та одразу робить її поточною.
git switch <name> перемикає на наявну гілку.
Перед створенням гілки потрібно перейти на правильну основу.
Незакомічені зміни перед перемиканням потрібно закомітити, тимчасово відкласти через git stash або свідомо видалити.
git branch -d безпечно видаляє вже інтегровану гілку.
git branch -D примусово видаляє гілку, тому потребує особливої обережності.