git merge
git merge: злити (англ. merge — злиття) зміни з іншої гілки в поточну.
Команда git merge інтегрує зміни з однієї гілки в іншу. Мета злиття — об'єднати роботу, зроблену в різних гілках, в одній гілці, зазвичай в основній гілці розробки.
Злиття — звична операція в робочих процесах Git, особливо коли нові можливості чи виправлення помилок розробляються в окремих гілках. Коли робота в гілці завершена й перевірена, гілку можна злити назад в основну (або будь-яку іншу цільову гілку), щоб перенести ці зміни.
В Git є два основні типи злиття:
-
Злиття fast-forward: відбувається, коли цільова гілка не розійшлася з гілкою-джерелом. У цьому випадку Git просто пересуває вказівник цільової гілки на останній коміт гілки-джерела. Новий коміт злиття не створюється, бо гілка-джерело й так попереду цільової.
-
Коміт злиття: коли цільова гілка розійшлася з гілкою-джерелом (тобто нові коміти є в обох гілках), Git створює новий коміт, який об'єднує зміни з обох гілок. Це і є коміт злиття, і в нього два батьківські коміти: один із цільової гілки, другий — із гілки-джерела.
Злиття fast-forward — найкращий спосіб тримати історію комітів чистою та лінійною. Цікаво, що часто цього досягають через git rebase, а не git merge. Замість салату з комітів, де твої коміти перемішані з комітами з іншої гілки, ребейз бере всі коміти з іншої гілки й накладає всі твої коміти поверх них, створюючи лінійну історію.
Іноді злиття закінчується конфліктом злиття — якщо ті самі рядки коду було змінено в обох гілках. У такому разі Git позначить конфліктні рядки у файлах, і доведеться розв'язувати конфлікти вручну: відредагувати файли й вирішити, які зміни залишити.
Пам'ятай: перед злиттям варто переконатися, що поточна гілка містить останні зміни з віддаленого репозиторію. Зроби git fetch, а потім git merge або git rebase з віддаленою гілкою. Це допоможе запобігти конфліктам і збереже історію чистішою.
Приклади
Злити гілку new-feature у поточну гілку:
git merge new-featureЗлити гілку login-form-bugfix у поточну гілку, створивши коміт злиття, навіть якщо можливе злиття fast-forward:
git merge --no-ff login-form-bugfixПерервати злиття, у якому виникли конфлікти:
git merge --abortПісля розв'язання конфліктів завершити злиття:
git add .git merge --continue
.gitignoregit checkoutgit configgit taggit worktree