Что означает «выбор вишни» с помощью Git? - PullRequest
1918 голосов
/ 18 февраля 2012

Недавно меня попросили cherry-pick коммит.

Так что же означает выбор вишни в коммите git?Как ты это делаешь?

Ответы [ 9 ]

2319 голосов
/ 18 февраля 2012

Выбор вишни в Git означает, что вы выбираете коммит из одной ветви и применяете его к другому.

Это отличается от других способов, таких как merge и rebase, которые обычно применяют множество коммитов к другой ветви.

  1. Убедитесь, что вы находитесь на ветвивы хотите применить коммит к.

    git checkout master
    
  2. Выполните следующее:

    git cherry-pick <commit-hash>
    

NB:

  1. Если вы выбираете вишню из публичной ветки, вам следует рассмотреть возможность использования

    git cherry-pick -x <commit-hash>
    

    . Это создаст стандартное сообщение о коммите.Таким образом, вы (и ваши коллеги) по-прежнему можете отслеживать происхождение коммита и можете избежать конфликтов слияния в будущем.

  2. Если к коммиту прикреплены заметкиони не следуют за вишней.Чтобы их перенести, Вы должны использовать:

    git notes copy <from> <to>
    

Дополнительные ссылки:

261 голосов
/ 13 мая 2015

Эта цитата взята из; Контроль версий с 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

перед: before

после того, как: after

143 голосов
/ 18 февраля 2012

Выбор Cherry в Git предназначен для применения некоторого коммита из одной ветви в другую.Это может быть сделано, если вы, например.допустил ошибку и совершил изменение в неправильную ветку, но не хочет объединять всю ветку.Вы можете просто например.верните коммит и выберите его в другой ветке.

Чтобы использовать его, вам просто нужно git cherry-pick hash, где hash - хеш коммита из другой ветви.

Для полной процедурысм .: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html

57 голосов
/ 11 декабря 2018

Краткий пример ситуации, когда вам нужен вишневый кир

Рассмотрим следующий сценарий. У вас есть две ветви.

a) release1 - эта ветка отправляется вашему клиенту, но есть все еще некоторые ошибки должны быть исправлены.

b) master - Классическая основная ветка, в которую, например, можно добавить функциональность для release2.

СЕЙЧАС : вы что-то исправили в release1 . Конечно, вам нужно это исправление также в master . И это типичный случай для сбора вишни. Таким образом, выбор вишни в этом сценарии означает, что вы берете коммит из ветви release1 и включаете его в ветку master .

46 голосов
/ 24 августа 2016

cherry-pick - это особенность Git.Если кто-то хочет зафиксировать определенные коммиты в одной ветви в целевую ветвь, то используется cherry-pick.
шаги git cherry-pick, как показано ниже.

  1. checkout (переключение на) целевой ветви.
  2. git cherry-pick <commit id>
    

    Здесь идентификатор фиксации является идентификатором активности другой ветви. Например:

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. переход к целевой ветви

Посетите https://git -scm.com / docs / git-cherry-pick

18 голосов
/ 01 февраля 2017

Вы можете подумать, что вишневый пик подобен перебазированию, или, скорее, он управляется как перебаз. Под этим я подразумеваю, что он берет существующий коммит и регенерирует его, принимая в качестве отправной точки заголовок ветви, в которой вы сейчас находитесь.

A rebase принимает коммит, у которого есть родительский X, и регенерирует коммит, как если бы у него действительно был родительский Y, и это именно то, что делает cherry-pick.

Cherry pick - больше о том, как вы выбираете коммиты. С pull (rebase) git неявно регенерирует ваши локальные коммиты поверх того, что тянется к вашей ветви, но с cherry-pick вы явно выбираете некоторые коммиты и неявно регенерируете их (их) поверх вашей текущей ветки .

Так что, как вы делаете это отличается, но под капотом они очень похожи операции - регенерация коммитов.

8 голосов
/ 07 октября 2016

Это вроде как Копировать (откуда-то) и Вставить (куда-то), но для конкретных коммитов.

Если вы хотите, например, сделать оперативное исправление, вы можете использовать функцию cherry-pick.

Сделайте cherry-pick в ветке разработки и merge, которые фиксируют ветку релиза. Аналогично, выполните cherry-pick от ветки релиза до мастера. Voila

5 голосов
/ 21 января 2019

Когда вы работаете с командой разработчиков над проектом, управление изменениями между несколькими ветками git может стать сложной задачей. Иногда вы не хотите объединять целую ветку в другую, и вам нужно только выбрать один или два конкретных коммита. Этот процесс называется «сбор вишни».

Нашли отличную статью по сбору вишни, за подробностями обращайтесь к ней: https://www.previousnext.com.au/blog/intro-cherry-picking-git

3 голосов
/ 19 марта 2019

Если вы хотите объединить без идентификаторов коммитов, вы можете использовать эту команду

git cherry-pick master~2 master~0

Приведенная выше команда объединит последние три коммита мастера от 1 до 3

Если вы хотите сделатьдля одиночного коммита просто удалите последний параметр

git cherry-pick master~2

Таким образом, вы объедините третий коммит с конца мастера.

...