Пошук уроків, статей та іншого контенту
Виконаєте злиття змін однієї гілки в іншу та перевірите результат об’єднання.
git mergeКоманда git merge об’єднує зміни з однієї гілки в поточну.
Синтаксис:
git merge <назва-гілки>Важливо: зміни вливаються саме в ту гілку, у якій ви перебуваєте зараз.
Наприклад, щоб додати зміни з гілки feature до гілки main, потрібно:
git switch main
git merge featureСпочатку ми переходимо в main, а потім виконуємо злиття feature з поточною гілкою main.
Створимо репозиторій і дві гілки:
mkdir merge-demo
cd merge-demo
git init
git config user.name "Developer"
git config user.email "developer@example.com"
echo "# Проєкт" > README.md
git add README.md
git commit -m "Створити README"
git branch feature
git switch feature
echo "Опис нової функції" > feature.txt
git add feature.txt
git commit -m "Додати опис функції"Тепер маємо:
гілку main із початковим комітом;
гілку feature із додатковим комітом;
поточна гілка — feature.
Перевірити поточну гілку можна командою:
git branch --show-currentРезультат:
featureПереглянути історію комітів:
git log --oneline --all --decorateЩоб додати зміни з feature до main, спочатку перейдемо в main:
git switch mainТепер виконаємо злиття:
git merge featureОскільки в main після створення feature не з’явилося нових комітів, Git може просто перемістити вказівник main на останній коміт гілки feature. Такий варіант називається fast-forward.
Типовий результат:
Updating 1234567..abcdef0
Fast-forward
feature.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 feature.txtПісля цього файл feature.txt буде доступний у гілці main.
Перевіримо стан репозиторію:
git statusОчікуваний результат:
On branch main
nothing to commit, working tree cleanПеревіримо вміст каталогу:
lsУ ньому мають бути:
README.md
feature.txtFast-forward можливий лише тоді, коли поточна гілка не має власних нових комітів після моменту створення іншої гілки.
Створимо новий коміт у main:
echo "Основна документація" >> README.md
git add README.md
git commit -m "Оновити README"Перейдемо до feature і створимо ще один коміт:
git switch feature
echo "Приклад використання" >> feature.txt
git add feature.txt
git commit -m "Додати приклад використання"Тепер обидві гілки мають власні коміти. Їхня історія розійшлася:
main: A---B
\
feature: CПовернемося в main і виконаємо злиття:
git switch main
git merge featureGit створить окремий merge-коміт, який об’єднає історію двох гілок:
A---B------M
\ /
C---Переглянути результат можна так:
git log --oneline --graph --decorate --allПараметри команди:
--oneline — показує кожен коміт в одному рядку;
--graph — відображає структуру гілок символами;
--decorate — показує назви гілок і тегів;
--all — включає коміти з усіх локальних гілок.
Після злиття варто перевірити:
git branch --show-currentЗлиття має виконуватися в тій гілці, яка повинна отримати зміни.
git statusЯкщо злиття завершилося успішно, Git зазвичай повідомляє:
nothing to commit, working tree cleangit log --oneline --graph --decorate --allТак можна переконатися, що коміти з іншої гілки присутні в історії поточної.
Якщо потрібно перевірити, чи залишилися відмінності між main і feature, виконайте:
git diff main..featureПорожній результат означає, що Git не знаходить відмінностей між станами цих гілок.
Перевірте, що потрібні файли присутні та містять очікувані зміни:
cat README.md
cat feature.txtПісля цього можна запустити тести або інші команди перевірки проєкту, якщо вони передбачені його налаштуваннями.
Конфлікт виникає, коли різні гілки змінюють одні й ті самі рядки файлу, і Git не може автоматично визначити, який варіант залишити.
Створимо такий сценарій:
git switch main
echo "Версія з main" > message.txt
git add message.txt
git commit -m "Змінити message.txt у main"
git switch feature
echo "Версія з feature" > message.txt
git add message.txt
git commit -m "Змінити message.txt у feature"
git switch main
git merge featureGit повідомить про конфлікт. У файлі з конфліктом з’являться спеціальні позначки:
<<<<<<< HEAD
Версія з main
=======
Версія з feature
>>>>>>> featureПозначки означають:
<<<<<<< HEAD — початок версії з поточної гілки;
======= — роздільник між версіями;
>>>>>>> feature — кінець версії з гілки, яку ми об’єднуємо.
Відредагуйте файл і залиште потрібний вміст без службових позначок. Наприклад:
Спільна узгоджена версіяПісля цього позначте конфлікт як вирішений:
git add message.txtЗавершіть злиття:
git commit -m "Вирішити конфлікт під час злиття feature"Перевірте стан:
git statusЯкщо всі конфлікти вирішено, робочий каталог буде чистим.
Якщо конфлікт складний і ви хочете повернутися до стану до початку злиття, виконайте:
git merge --abortЦю команду можна використовувати, поки злиття ще не завершене комітом.
Після скасування перевірте стан репозиторію:
git statusГілка повернеться до стану, у якому була перед командою git merge.
Нижче наведено послідовність команд для типового злиття функціональної гілки в main:
# Перевірити поточну гілку
git branch --show-current
# Перейти в гілку, яка має отримати зміни
git switch main
# Переконатися, що робочий каталог не містить незбережених змін
git status
# Об'єднати гілку feature з поточною гілкою main
git merge feature
# Перевірити стан після злиття
git status
# Переглянути оновлену історію
git log --oneline --graph --decorate --allЯкщо Git повідомить про конфлікт:
# Переглянути файли з конфліктами
git status
# Після ручного виправлення конфліктів додати виправлені файли
git add <файл>
# Завершити злиття
git commitmerge не в тій гілціКоманда:
git merge featureдодає feature у поточну гілку. Якщо ви перебуваєте у feature, команда намагатиметься об’єднати гілку feature саму з собою, а не додати її до main.
Перед злиттям перевіряйте:
git branch --show-currentЯкщо робочий каталог містить незбережені зміни, Git може відмовитися виконувати злиття, щоб не перезаписати файли.
Перевірте стан:
git statusПеред злиттям збережіть зміни комітом або іншим безпечним способом, передбаченим вашим робочим процесом.
Після конфлікту не можна просто продовжувати роботу, не завершивши або не скасувавши злиття.
Перевірте список проблемних файлів:
git statusПісля виправлення кожного файлу виконайте git add, а потім завершіть злиття комітом.
Після git merge завжди корисно перевірити:
git status
git log --oneline --graph --decorate --allТак ви переконаєтеся, що злиття завершилося, а історія містить очікувані коміти.
git merge <гілка> об’єднує вказану гілку з поточною.
Перед злиттям потрібно перейти в гілку, яка має отримати зміни.
Якщо історія не розійшлася, Git може виконати злиття через fast-forward.
Якщо обидві гілки мають окремі коміти, Git створює merge-коміт.
Після злиття перевіряйте git status та історію через git log --graph.
Конфлікти потрібно виправити вручну, додати виправлені файли через git add і завершити злиття комітом.
Незавершене злиття можна скасувати командою git merge --abort.