Cherry pick commit что это
Перейти к содержимому

Cherry pick commit что это

  • автор:

A3.8 Приложение C: Команды Git — Внесение исправлений

Некоторые команды в Git основываются на подходе к рассмотрению коммитов в терминах внесённых ими изменений, т. е. рассматривают историю коммитов как цепочку патчей. Ниже перечислены эти команды.

git cherry-pick

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

Этот процесс описан и показан в разделе Схема с перебазированием и отбором главы 5.

git rebase

git rebase — это «автоматизированный» cherry-pick . Он выполняет ту же работу, но для цепочки коммитов, тем самым как бы перенося ветку на новое место.

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

Мы использовали эту команду на практике для разбиения истории на два репозитория в разделе Замена главы 7, наряду с использованием флага —onto .

В разделе Rerere главы 7 мы рассмотрели случай возникновения конфликта во время переноса коммитов.

Также мы познакомились с интерактивным вариантом git rebase , включающемся с помощью опции -i , в разделе Изменение сообщений нескольких коммитов главы 7.

git revert

Команда git revert — полная противоположность git cherry-pick . Она создаёт новый коммит, который вносит изменения, противоположные указанному коммиту, по существу отменяя его.

Мы использовали её в разделе Отмена коммита главы 7 чтобы отменить коммит слияния (merge commit).

Git Cherry Pick

git cherry-pick — это полезная команда, с помощью которой можно выборочно применить коммиты Git к текущей рабочей ветке HEAD. С ее помощью можно выбрать коммит из одной ветки и применить его к другой. Команда git cherry-pick — это удобный способ отменить изменения. Например, если коммит попал в ветку по ошибке, вы можете переключиться на нужную ветку и выполнить перенос.

Когда следует использовать команду git cherry-pick

Пользоваться командой git cherry-pick удобно, однако это не всегда оптимально. Она может привести к дублированию коммитов, поэтому нередко разработчики предпочитают обычное слияние. Таким образом, можно сказать, что команда git cherry-pick — средство эффективное, но узконаправленное.

Командная работа

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

Git: объясните «на пальцах» разницу между rebase и cherry-pick?

С августа начал активно использовать git в рабочих и личных проектах. Началось все с тотального непонимания и ненависти, постепенно пришел к любви и восхищению.

Изучил официальный учебник, прочитал и попробовал или уже внедрил много хороших практик и, неочевидных после SVN, workflow. Чувствую себя спокойно и уверенно с гитом, но как-то до сих пор не смог осознать разницу между rebase и cherry-pick. Вроде и та и другая команды грубо говоря берут оттуда и суют сюда. Одни и те же задачи из своего повседневного рациона можно сделать как с помощью одной, так и с помощью другой. Но не дает покоя мысль, что не зря они разные и я что-то упускаю. Учебник не помогает, гугл не спасает.

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

  • Вопрос задан более трёх лет назад
  • 186226 просмотров

Комментировать
Решения вопроса 1

sergey-kuznetsov

Сергей Кузнецов @sergey-kuznetsov Куратор тега Git
Автоматизатор
Rebase это по сути cherry-pick нескольких коммитов за раз — пакетный режим.
Вот и вся разница.
Ответ написан более года назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 3

ToxigG

Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
Добавлю картинок.

git rebase devel — собачка на молнии — «сшивает» коммиты по дате их создания
(ветка devel «растворяется» в основной ветке)
518b8dbce1cd4f96b30de9782ae38fcd.png
git merge devel — пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
(devel остается отдельной веткой, к которой можно вернуться)
1ba8186d879d46ff85ea7c1e192328e2.png
git chery-pick idea — забрать коммиты из ветки idea
2717e3091f644ef2954aa2de4514f446.png

Ответ написан более трёх лет назад
Нравится 98 2 комментария
Алексей Барбарош @mariusraver

Александр .В PS Nkly777 я так полагаю он писал с точки зрения даты, то в этом случае он всё правильно написал.

Nkly777 все правильно написал.
`git rebase devel` не скрепляет коммиты по дате создания, а перемешает коммиты текущей ветки master, созданные в ветки master после разветвления с веткой `devel` на вершину коммитов ветки `devel`.
Команда так и называется – изменить базу.

git chery-pick — ты забираешь комиты из одной ветки в другую, это бывает полезно когда изменения сделаные другим разработчиком в его ветке, прямо сейчас нужны тебе в твоей ветке, и что бы не писать этот код заново, ты забираешь его комит себе в ветку

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

git merge — обычно используется когда у вас 2 и более master ветки (к примеру master и prototype) в этих ветках очень много комитов (и rebase здесь не подходит) и обчно через пару недель, maintainer репозитория наработки из prototype ветки «сливает» в master ветку по средствам этого самого git merge

P.S. Что бы легче предствить разницу между git merge и git rebase. Представь что merge как собачка на молнии у одежды — «сшивает» комиты по дате их создания.
В то время как git rebase как пожарная лестница — при применении твои коммиты крепится на конец родительской ветки

git merge используйте для мержа фич и фиксов в master ветку (как и делает это Github)
а git rebase используется для своей ветку в которой вы работаете над фичей что бы забрать последние изменения с master ветку (для этого есть очень удобная команда `git pull —rebase origin master`, аналог 3х команд (`git checkout master; git pull origin master; git checkout mybrach; git rebase master`)

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

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

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

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

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

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

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

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

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

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

Почему Cherry Pick?

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

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

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

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

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

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

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

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

git вишня выбор 1da76d3

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

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

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

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

Tremplin Numérique

Написание Tremplin Numérique, французское веб-агентство. Наши авторы ежедневно и бесплатно предоставляют вам последние технологические и цифровые новости во Франции и во всем мире.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *