Як я об'єднаю певну комісію з однієї гілки в іншу в Git?


Відповіді:


233

git cherry-pick <commit>Команда дозволяє взяти одну фіксацію (від якої - небудь гілки) і, по суті, перебазувати його в робочій гілки.

Розділ 5 книги Pro Git пояснює це краще, ніж я можу , разом із діаграмами та ін. ( Розділ про звільнення також добре читається.)

Нарешті, є кілька хороших коментарів щодо вишнювання та злиття проти звільнення в іншому питанні .


1
Питання: скажімо Комміт Aвідгалужується від masterі ви зробити деяку роботу над цим, створюючи дочірні фіксацій Bчерез E. Скажіть, додано Eлише 1 рядок від D. Якщо ви git cherry-pick Eв master, вона застосовується все зміни з Aдопомогою Eв masterгалузі, або це тільки застосувати зміна від Dдо E, а саме, це тільки додає , що 1 рядок master? Якщо справа є першою, як я досягти останнього? (окрім копіювання та вставки вручну)
chharvey

7
git cherry-pick -n <commit> Якщо ви не хочете, щоб вишня вибиралася автоматично.
Бен Флінн

6

Якщо BranchA не було висунуто на пульт дистанційного керування, ви можете змінити порядок використання, rebaseа потім просто merge. Переважно використовувати mergeбільше, rebaseколи це можливо, оскільки він не створює повторюваних комітетів.

git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]

2

ДЖЕРЕЛ: https://git-scm.com/book/en/v2/Distributed-Git-Maintain-a-Project#Integrating-Contributed-Work

Інший спосіб переміщення запровадженої роботи з однієї галузі в іншу - це її вишня. Вишня в Git - це схоже на перезавантаження однієї комісії. Він бере виправлення, яке було введено в коміті, і намагається повторно застосувати його на гілці, на якій ви зараз перебуваєте. Це корисно, якщо у вас є декілька комітетів у тематичній гілці, і ви хочете інтегрувати лише одну з них, або якщо у вас є лише одна фіксація на тематичній гілці, і ви хочете скористатись нею вишні, а не запускати ребазування. Наприклад, припустимо, у вас є проект, який виглядає приблизно так:

введіть тут опис зображення

Якщо ви хочете вивести команду e43a6 у свою головну гілку, можете запустити

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

Це тягне ту саму зміну, яку було введено в e43a6, але ви отримуєте нове значення фіксації SHA-1, оскільки застосована дата відрізняється. Тепер ваша історія виглядає так:

введіть тут опис зображення

Тепер ви можете видалити свою галузь теми та скинути зобов’язання, які ви не хотіли використовувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.