Щоб вибірково об'єднати файли з однієї гілки в іншу гілку, запустіть
git merge --no-ff --no-commit branchX
де branchX
знаходиться гілка, з якої ви хочете об'єднатись у поточну гілку.
Ця --no-commit
опція зможе поетапно встановити файли, об'єднані Git, фактично не виконуючи їх. Це дасть вам можливість змінювати об'єднані файли, як тільки ви хочете, а потім виконувати їх самостійно.
Залежно від способу об'єднання файлів, є чотири випадки:
1) Ви хочете справжнього злиття.
У цьому випадку ви приймаєте об'єднані файли так, як Git автоматично їх об'єднав, а потім зв'язав.
2) Є деякі файли, які ви не хочете об’єднувати.
Наприклад, ви хочете зберегти версію в поточній гілці і проігнорувати версію в гілці, з якої ви з’єднуєтесь.
Щоб вибрати версію в поточній гілці, запустіть:
git checkout HEAD file1
Це отримає версію file1
в поточній гілці і замінить автоматизований file1
Git.
3) Якщо ви хочете, щоб версія в branchX (а не справжнє злиття).
Виконати:
git checkout branchX file1
Це отримає версію file1
в branchX
і замінить file1
автоматичне об'єднання Git.
4) Останній випадок, якщо ви хочете вибрати лише конкретні злиття в file1
.
У цьому випадку ви можете редагувати модифіковану file1
безпосередньо, оновлювати її до того, на що хочете file1
стати версією , а потім виконувати.
Якщо Git не зможе автоматично об'єднати файл, він повідомить про файл як " незаряджений " та створить копію, де потрібно буде вирішити конфлікти вручну.
Щоб пояснити далі на прикладі, скажімо, що ви хочете об'єднатись branchX
у поточну гілку:
git merge --no-ff --no-commit branchX
Потім виконується git status
команда для перегляду стану модифікованих файлів.
Наприклад:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
Де file1
, file2
і file3
чи файли git успішно об'єднані автоматично.
Що це означає, що зміни в master
і branchX
для всіх цих трьох файлів були об'єднані разом без будь - яких конфліктів.
Ви можете перевірити, як було зроблено об'єднання, запустивши git diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Якщо ви вважаєте, що якесь злиття є небажаним, ви можете
- редагуйте файл безпосередньо
- зберегти
git commit
Якщо ви не хочете об'єднатись file1
і хочете зберегти версію в поточній галузі
Біжи
git checkout HEAD file1
Якщо ви не хочете об'єднатись file2
і хочете лише версію вbranchX
Біжи
git checkout branchX file2
Якщо ви хочете file3
бути об'єднані автоматично, нічого не робіть.
Git вже з’єднав його в цей момент.
file4
вище - невдале злиття Git. Це означає, що в обох гілках відбуваються зміни, що відбуваються в одній лінії. Тут потрібно буде вирішити конфлікти вручну. Ви можете відмовитись від об'єднаного файлу, відредагувавши файл безпосередньо, або виконавши команду оформлення замовлення для версії, у якій ви хочете file4
стати.
Нарешті, не забудьте git commit
.