Поиск по сайту:

Что делает Git Cherry Pick и когда его следует использовать?


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

Что такое Git Cherry Pick и как он работает?

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

Это, конечно, упрощение, и технически Git не хранит коммиты в виде простых списков изменений, он использует BLOB-объекты на основе файлов, но принцип тот же.

Все становится сложнее, когда в дело вступают филиалы. Часто работа над фичей занимает много дней или недель. Вместо того, чтобы загромождать основной репозиторий, он помещается в отдельную ветку функций, а затем код проверяется и снова объединяется. Слияние — это, по сути, разветвление этой истории коммитов, так что вся ветка функций включается, когда Git делает свое дело.

Однако что, если вы хотите объединить некоторые вещи, но пока не хотите включать всю ветку? В этом случае вы не можете использовать git merge.

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

Обратите внимание, что нет реальной «линии», соединяющей новый коммит в ветке master со старым коммитом. Новый выбранный коммит, созданный на мастере, вообще не ссылается на исходный коммит, коммит просто копируется. Git позаботится об этом, когда вы объедините ветки вместе, потому что коммиты рассматриваются как копии друг друга.

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

Почему Черри Пик?

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

Или, возможно, у вас есть несколько веток для производства и разработки, и вы хотите скопировать срочное исправление ошибки из производства в разработку. Cherry Pick может сделать это тоже.

Или, возможно, вы даже случайно сделали коммит не в ту ветку. Вы можете использовать git cherry-pick, чтобы скопировать его в нужное, а затем git reset , чтобы отменить этот коммит (при условии, что он находится в HEAD ветки).

Использование Git Cherry Pick

Как только вы поймете, что делаете, git cherry-pick станет довольно простым в использовании.

Самый простой способ просмотреть историю коммитов Git в командной строке — это следующая команда, которая показывает все коммиты, но с историей ветвления и слияния, что очень важно для использования вишневого выбора:

git log --pretty=format:"%h %s" --graph

Затем вы можете просто скопировать хэш SHA1 коммита и запустить выбор вишни:

git cherry-pick 1da76d3

Обратите внимание, что вы также можете выбрать несколько коммитов одновременно, просто передав несколько хэшей.

У git cherry-pick есть несколько полезных опций:

  • --no-commit применяет изменения только к вашему каталогу. Вам нужно будет подготовить и зафиксировать вручную.
  • --edit позволит вам изменить сообщение фиксации.
  • -x добавит сообщение «Вишенка выбрана из коммита:…»

Конечно, если вы используете клиент Git с графическим интерфейсом, такой как Fork или GitKraken, который мы настоятельно рекомендуем, вы можете просто щелкнуть правой кнопкой мыши коммит и выбрать его: