У мене на BranchA
113 випереджає BranchB
.
Але я хочу лише, щоб останні 10 зобов’язань були BranchA
об'єднані в BranchB
.
Чи є спосіб це зробити?
У мене на BranchA
113 випереджає BranchB
.
Але я хочу лише, щоб останні 10 зобов’язань були BranchA
об'єднані в BranchB
.
Чи є спосіб це зробити?
Відповіді:
git cherry-pick <commit>
Команда дозволяє взяти одну фіксацію (від якої - небудь гілки) і, по суті, перебазувати його в робочій гілки.
Розділ 5 книги Pro Git пояснює це краще, ніж я можу , разом із діаграмами та ін. ( Розділ про звільнення також добре читається.)
Нарешті, є кілька хороших коментарів щодо вишнювання та злиття проти звільнення в іншому питанні .
A
відгалужується від master
і ви зробити деяку роботу над цим, створюючи дочірні фіксацій B
через E
. Скажіть, додано E
лише 1 рядок від D
. Якщо ви git cherry-pick E
в master
, вона застосовується все зміни з A
допомогою E
в master
галузі, або це тільки застосувати зміна від D
до E
, а саме, це тільки додає , що 1 рядок master
? Якщо справа є першою, як я досягти останнього? (окрім копіювання та вставки вручну)
Якщо 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]
ДЖЕРЕЛ: 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, оскільки застосована дата відрізняється. Тепер ваша історія виглядає так:
Тепер ви можете видалити свою галузь теми та скинути зобов’язання, які ви не хотіли використовувати.