Git
Выбор вишни
Поиск…
Вступление
Вишневый подборщик берет патч, который был введен в фиксацию, и пытается повторно применить его в филиале, в котором вы сейчас находитесь.
Синтаксис
- git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] [-S [key-id]] commit ...
- git cherry-pick - продолжение
- git cherry-pick --quit
- git cherry-pick --bort
параметры
параметры | подробности |
---|---|
-e, --edit | С помощью этой опции git cherry-pick позволит вам отредактировать сообщение фиксации до фиксации. |
-Икс | При записи фиксации добавьте строку, в которой говорится: «(вишня выбрана из фиксации ...)» в исходное сообщение фиксации, чтобы указать, какое из этих изменений выбрано вишневым. Это делается только для выбора вишни без конфликтов. |
--ff | Если текущий HEAD совпадает с родительским элементом фиксации вишни, тогда будет выполнена быстрая перемотка вперед к этой фиксации. |
--Продолжить | Продолжайте работу, используя информацию в .git / sequencer. Может использоваться для продолжения после разрешения конфликтов при неудачном наборе вишни или возврате. |
--уволиться | Забудьте о текущей текущей операции. Может использоваться для очистки состояния секвенсора после неудачного набора вишни или возврата. |
--abort | Отмените операцию и верните ее в состояние предварительной последовательности. |
Копирование фиксации из одной ветки в другую
git cherry-pick <commit-hash>
будет применять изменения, сделанные в существующей фиксации к другой ветке, при записи нового фиксации. По существу, вы можете скопировать фиксации из ветки в ветвь.
Учитывая следующее дерево (Источник)
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
76cada - 62ecb3 - b886a0 [feature]
Предположим, мы хотим скопировать b886a0
на мастер (сверху 5a6057
).
Мы можем запускать
git checkout master
git cherry-pick b886a0
Теперь наше дерево будет выглядеть примерно так:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 - a66b23 [master]
\
76cada - 62ecb3 - b886a0 [feature]
Если новый commit a66b23
имеет одинаковый контент (источник diff, сообщение фиксации) как b886a0
(но другой родительский элемент). Обратите внимание, что выбор вишни будет только забирать изменения в этой фиксации ( b886a0
в этом случае) не все изменения в ветке функций (для этого вам придется либо использовать перезагрузку, либо слияние).
Копирование диапазона транзакций из одной ветви в другую
git cherry-pick <commit-A>..<commit-B>
поместит каждую фиксацию после A и до git cherry-pick <commit-A>..<commit-B>
включит B поверх текущей отмеченной ветви.
git cherry-pick <commit-A>^..<commit-B>
поместит фиксацию A и каждую фиксацию до и включительно B поверх текущей отмеченной ветви.
Проверка наличия вишни
Прежде чем вы начнете процесс вишневого выбора, вы можете проверить, существует ли фиксация, которую вы хотите использовать для зависания, в целевой ветке, и в этом случае вам не нужно ничего делать.
git branch --contains <commit>
отображает локальные ветви, содержащие указанную фиксацию.
git branch -r --contains <commit>
также включает в себя удаленные ветви отслеживания в списке.
Найти коммиты, которые еще не применяются для восходящего потока
Команда git cherry
показывает изменения, которые еще не выбраны вишней.
Пример:
git checkout master
git cherry development
... и см. вывод немного так:
+ 492508acab7b454eee8b805f8ba906056eede0ff
- 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949
+ b4459544c000f4d51d1ec23f279d9cdb19c1d32b
+ b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9
Конец, что с +
будет теми, кто еще не вишневый в development
.
Синтаксис:
git cherry [-v] [<upstream> [<head> [<limit>]]]
Опции:
-v Показывать объекты фиксации рядом с SHA1.
<вверх по течению> Отправление вверх для поиска эквивалентных коммитов. По умолчанию используется дочерняя ветвь HEAD.
<head> Рабочая ветвь; по умолчанию - HEAD.
<limit> Не сообщать о фиксации до (и включая) лимита.
Ознакомьтесь с документацией на git-cherry для получения дополнительной информации.