Что означает вишневый сбор фиксации с git?

недавно меня попросили вишневый выбрать фиксацию. Но я понятия не имею, что это значит. Так что cherry picking коммит в ГИТ? Как вы это делаете?

6 ответов


сбор вишни в git означает выбор фиксации из одной ветви и применение ее к другой.

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

  1. убедитесь, что вы находитесь в ветке, к которой хотите применить фиксацию.

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

    git cherry-pick <commit-hash>
    

Б. Н.:

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

    git cherry-pick -x <commit-hash>
    

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

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

    git notes copy <from> <to>
    

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


эта цитата взята из; контроль версий с Git (Действительно отличная книга, Я призываю вас купить ее, если вы заинтересованы в git)

Edit: так как этот ответ все еще получает впечатление, я хотел бы добавить очень хороший в действии видео-учебник об этом:

Youtube: введение в Git cherry-pick

С помощью Git подбирать команду git выбирают совершить применяет изменения, внесенные названным фиксация на текущей ветке. Оно будет введите новую, отдельную фиксацию. строго говоря, используя git cherry-pick не изменяет существующую историю в репозитории; вместо этого он добавляет истории. Как и с другими операциями Git, которые внесите изменения через процесс применения diff, вам может потребоваться разрешите конфликты, чтобы полностью применить изменения из данной фиксации . Команда git cherry-pick обычно используется для введения конкретного commits from one ветвь в хранилище на другую ветвь. Ля общее использование - это коммиты вперед-или назад-порта от обслуживания филиал в филиал развития.

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above

перед: before

после: after


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

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

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


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

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

    здесь commit id-это идентификатор активности другой ветви.Например.

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. нажмите на целевую ветку

визит https://git-scm.com/docs/git-cherry-pick


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

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

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

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


это похоже на копирование (откуда-то) и вставку (куда-то), но для определенных коммитов.

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

делать cherry-pick в ветке развития, и merge которые фиксируются в ветке выпуска. Аналогично, сделайте cherry-pick из ветви выпуска в master. Вуаля!--5-->