Основні відповіді описують, як застосувати зміни від конкретного комітету до поточної гілки. Якщо це ви маєте на увазі під «об’єднанням», просто використовуйте вишню, як вони пропонують.
Але якщо ви насправді хочете злиття , тобто ви хочете зробити нове зобов'язання з двома батьками - існуюче зобов’язання на поточній гілці, і зобов’язання, з якого ви хотіли застосувати зміни, - це вибір вибору не виконає цього.
Наприклад, правдива історія злиття може бути бажаною, наприклад, якщо ваш процес збирання використовує переваги git, щоб автоматично встановлювати рядки версій на основі останнього тегу (використовуючи git describe
).
Замість вишні ви можете зробити фактичне git merge --no-commit
, а потім вручну відрегулювати індекс, щоб видалити всі зміни, які ви не хочете.
Припустимо, ви перебуваєте на гілці, A
і ви хочете об'єднати комітку на кінчику гілки B
:
git checkout A
git merge --no-commit B
Тепер ви налаштовані створити зобов’язання з двома батьками, поточна порада - A
і B
. Однак у вас може бути застосовано більше змін, ніж ви хочете, включаючи зміни попередніх комісій у відділенні B. Вам потрібно скасувати ці небажані зміни, а потім виконати.
(Можливо, буде простий спосіб повернути стан робочого каталогу та індексу назад таким чином, як це було до злиття, щоб у вас був чистий аркуш, на якому в першу чергу виберіть потрібний комітет. Але Я не знаю, як досягти цього чистого шиферу. git checkout HEAD
І git reset HEAD
вони обидва видалять стан злиття, перемагаючи мету цього методу.)
Тому скасовуйте небажані зміни вручну. Наприклад, ви могли
git revert --no-commit 012ea56
за кожне небажане вчинення 012ea56
.
Закінчивши коригування речей, створіть свою команду:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Тепер у вас є лише зміна, яку ви хотіли, і дерево прабатьків показує, що ви технічно злилися з Б.