Відповіді:
Вибір вишні в Git означає вибрати зобов’язання з однієї гілки та застосувати її до іншої.
Це на відміну від інших способів, таких як merge
та, rebase
які зазвичай застосовують багато комісій до іншої гілки.
Переконайтеся, що ви перебуваєте на гілці, до якої ви хочете застосувати зобов'язання.
git checkout master
Виконайте наступне:
git cherry-pick <commit-hash>
Примітка:
Якщо ви збираєте вишню з громадського відділення, вам варто подумати про використання
git cherry-pick -x <commit-hash>
Це створить стандартизоване повідомлення про фіксацію. Таким чином, ви (та ваші колеги) все ще можете відслідковувати походження зобов’язань і, можливо, уникнути конфліктів злиття в майбутньому.
Якщо у вас є прикріплені нотатки до комітету, вони не дотримуються вишні. Щоб їх також передати, Ви повинні використовувати:
git notes copy <from> <to>
Додаткові посилання:
git cherry-pick -x <commit-hash>
. Це створить стандартизоване повідомлення про фіксацію. Таким чином, ви (та ваші колеги) все ще можете відслідковувати походження зобов’язань і, можливо, уникнути конфліктів злиття в майбутньому.
git notes copy <from> <to>
щоб також їх переробити.
"cherry-pick commit applies the changes introduced by the named commit on the current branch"
Більшості ppl, як правило, сприймає фіксацію як зміни (як svn був iirc), але це не так, кожне командування відноситься до повного робочого дерева. Хоча це не має значення в цьому випадку, це може допомогти зрозуміти, чому git працює так, як це робиться.
Ця цитата взята з; Контроль версій з Git (Дійсно чудова книга, я рекомендую придбати її, якщо вас цікавить git)
Редагувати: Оскільки ця відповідь все ще справляє враження, я хотів би додати дуже приємний у навчальному відео уроці про неї:
Youtube: Знайомство з Git cherry-pick
Використання git cherry-pick Команда git cherry-pick виконує зміни, внесені іменованим комітетом у поточну гілку. Він введе новий чіткий комітет. Строго кажучи, використання git cherry-pick не змінює існуючу історію в сховищі; натомість це додає до історії. Як і в інших операціях Git, які вносять зміни в процесі застосування розрізника, вам може знадобитися вирішити конфлікти, щоб повною мірою застосувати зміни даної комісії . Команда git cherry-pick зазвичай використовується для введення конкретних комірок з однієї гілки в сховищі до іншої гілки. Загальноприйнятим є використання для передачі або повернення порту від гілки технічного обслуговування до гілки розвитку.
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above
перед:
після:
Збір вишні в Git розроблений для того, щоб застосувати деяку комісію з однієї гілки в іншу. Це можна зробити, якщо ви, наприклад. допустив помилку і допустив перехід до неправильної гілки, але не хоче зливати всю гілку. Ви можете, наприклад, поверніть комітку і виберіть його на іншій гілці.
Щоб використовувати його, вам просто потрібно git cherry-pick hash
, де hash
знаходиться хеш фіксації з іншої гілки.
Повну процедуру дивіться на веб-сайті: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
Короткий приклад ситуації, коли вам потрібна вишня
Розглянемо наступний сценарій. У вас є дві гілки.
a) release1 - Ця філія збирається до вашого клієнта, але все ще є деякі помилки, які потрібно виправити.
б) master - класична гілка master, де ви можете, наприклад, додати функціональність для release2.
ЗАРАЗ : Ви виправляєте щось у випуску1 . Звичайно, вам потрібно це виправлення також у майстра . І це типовий випадок для збору вишні. Тож вибір вишні у цьому сценарії означає, що ви берете на себе зобов’язання з випуску1 і включаєте його у головну гілку.
вишневий пік - це функція Git. Якщо хтось хоче виконати певні зобов’язання в одній гілці до цільової гілки, тоді використовується вишня.
кроки вибору вишні, як показано нижче.
git cherry-pick <commit id>
Тут ID ідентифікатора - ідентифікатор діяльності іншої гілки.Напр.
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
Відвідайте https://git-scm.com/docs/git-cherry-pick
Я підготував покрокові ілюстрації того, що робить вишня - і анімацію цих ілюстрацій (ближче до кінця).
git cherry-pick feature~2
feature~2
є другий фіксатор раніше feature
, тобто фіксація L
):
Примітка:
Здійснення фіксації L'
- це з точки зору користувача (commit = знімок) точна копія L
.
Технічно (внутрішньо) це нова, інша фіксація (тому що, наприклад, L
містить вказівник на K
(як її батьків), а L'
містить вказівник на E
).
Ви можете подумати, якщо вишневий набір схожий на ребазування, а точніше, він керується як ребаз. Маючи на увазі, я маю на увазі, що він приймає існуючий комітет і відновлює його, приймаючи за вихідний пункт керівника філії, на якій ви зараз перебуваєте.
A rebase
приймає команду, яка мала батьківський X, і регенерує команду так, ніби вона насправді мала батьківський Y, і саме це cherry-pick
робить a .
Вишневий вибір - це більше про те, як ви вибираєте товари. З допомогою pull
(rebase) git неявно відновлює ваші локальні комітети на основі того, що було потягнуто до вашої гілки, але cherry-pick
ви чітко вибираєте деякі фіксації (і) та неявно відновлюєте їх (їх) поверх вашої поточної гілки.
Тож те, як ви це робите, відрізняється, але під кришкою вони дуже схожі операції - регенерація комітів.
cherry-pick
поводиться так, як це робиться, коли цільова гілка згодом об'єднується назад у вихідну гілку. Дякую вам сер.
Це на зразок Copy (звідкись) і Paste (кудись), але для конкретних комісій.
Якщо ви хочете, наприклад, зробити виправлення, тоді ви можете скористатися cherry-pick
функцією.
Виконайте це cherry-pick
у галузі розвитку, і merge
це зобов’язане випустити галузь. Точно так само зробіть cherry-pick
з гілки випуску майстер. Вуаля
Коли ви працюєте з командою розробників над проектом, управління змінами між низкою гілок git може стати складним завданням. Іноді не хочеться об'єднати цілу гілку в іншу, а потрібно вибрати лише один або два конкретні коміти. Цей процес називається «збирання вишні».
Знайшов чудову статтю про збирання вишні, ознайомтесь із детальними деталями: https://www.previousnext.com.au/blog/intro-cherry-picking-git
Якщо ви хочете об'єднатися без ідентифікаторів комісій, ви можете скористатися цією командою
git cherry-pick master~2 master~0
Вищенаведена команда об'єднає три останні коміти від 1 до 3
Якщо ви хочете зробити це за один прихил, просто видаліть останню опцію
git cherry-pick master~2
Таким чином ви з’єднаєте третій комікс з кінця майстра.
Він застосує певну комісію до вашої поточної галузі.
Це означає :
Наприклад: Розглянемо вчинення A
added newFileA
modified main:
+ import './newFileA'
вчинити Б
added newFileB
modified main:
+ import './newFileB'
Якщо ви виберіть команду B на іншій гілці, ви закінчите:
/newFileB
/main :
import './newFileA'
import './newFileB'
оскільки команда B містить newFileB та main , але не newFileA , що призводить до помилок, тому використовуйте з обережністю.
Витяг з офіційних документів:
З огляду на один або декілька існуючих зобов’язань, застосуйте зміну, яку кожен вводить, записуючи нову комісію для кожного. Для цього потрібно, щоб ваше робоче дерево було чистим (жодних модифікацій, пов'язаних із заголовком HEAD).
Коли не очевидно, як застосувати зміни, відбувається таке:
Поточна гілка та вказівник HEAD залишаються на останньому успішному виконанні.
Посилання CHERRY_PICK_HEAD встановлюється в точці коміту, який вніс зміни, які важко застосувати.
Шляхи, в яких чітко застосована зміна, оновлюються як у файлі індексу, так і у вашому робочому дереві.
Для конфліктуючих шляхів файл індексу записує до трьох версій, як описано в розділі "TRUE MERGE" git-merge. Файли робочого дерева включатимуть опис конфлікту, закресленого звичайними маркерами конфліктів <<<<<<< та >>>>>>>.
Інші модифікації не вносяться.