Да приемем, че имате Git хранилище. Работите върху майстор клон и сте направили няколко ангажименти (A, B и C) на майстор клон също.
Сега изведнъж имате страхотна идея. И така, вие създавате друг клон newidea. След това започнахте да правите ангажименти (E, F и G) там.
Направихте и някои промени в майстор клон отново и добави нов ангажимент З.
Сега, ако новата ви идея е успешна, тогава може да искате да обедините newidea клон до майстор клон. Да кажем, че сте го обединили. Това ще създаде нов ангажимент Аз както можете да видите на фигурата по-долу. Новият комит ще съдържа всичко (всички промени в комитите Е, F, и G) на клона newidea.
Сега, да речем, не искате да обединявате всички ангажименти на клона newidea към майстор клон. Искате само да обедините промените (само разликите се променят) в фиксацията F към майстор клон. Тук идва git cherry pick. Git cherry pick ви позволява да го направите. Просто намирате хеша на коммита, който искате да изберете, и го прилагате към клона, който искате. Много просто.
В тази статия ще ви покажа как да избирате череши в Git. И така, нека започнем.
Работен процес на Git Cherry Pick:
В този раздел ще настроя хранилище на Git по начин, по който ще разберете защо се използва git cherry pick и как да череша в Git.
Първо инициализирайте празно хранилище на Git череша-демо-демо / както следва:
$ git init cherry-pick-demo
Сега отидете до хранилището, както следва:
$ cd cherry-pick-demo /
Сега създайте a основен.° С файл със следното съдържание:
Сега добавете файла към подреждането, както следва:
$ git add .
Сега ангажирайте промените, както следва:
$ git commit -m 'първоначален ангажимент'
Сега създайте a .gitignore файл със следното съдържание:
Добавете файла към подреждащата област.
$ git add .
Задайте промените:
$ git commit -m 'добавен .gitignore файл '
Както можете да видите, сега имам 2 ангажирания в моя майстор клон.
$ git log --oneline
Сега искам да прехвърля локалното си Git хранилище към отдалечен Git сървър, за да могат други хора да работят върху това хранилище. Можете да използвате GitHub и тук. Ще използвам локален SSH сървър за това тук.
Така че, добавете URL адрес на отдалечено Git хранилище, както следва:
$ git отдалечено добавяне на произход git @ git.linuxhint.com: ~ / cherry-pick-demo.git
Сега натиснете майстор клон към отдалеченото хранилище на Git, както следва:
$ git push master master
Сега, да кажем Боб иска да допринесе за проекта. И така, той клонира хранилището на Git на компютъра си.
$ git clone git @ git.linuxhint.com: ~ / cherry-pick-demo.git myproject
Сега bob се придвижва до директорията на проекта си.
$ cd myproject /
Той също така има 2 ангажименти, които съм добавил.
$ git log --oneline
Сега bob създава a тест клон, за да изпробва идеите му.
$ git checkout -b тест
Той решава да промени върнатата стойност с константа EXIT_SUCCESS от stdlib библиотека.
Той добавя промените към сценичната зона.
$ git add .
Фиксира промените.
$ git commit -m 'използва EXIT_SUCCESS вместо 0 като върната стойност'
Сега той решава да използва функция printMessage () за да отпечатате съобщението. И така, той пише функцията.
Той отново извършва промените.
$ git add .$ git commit -m 'добавена функция printMessage ()'
След това bob използва функцията в програмата.
Той отново извършва промените.
$ git add .$ git commit -m 'използва функцията printMessage () за отпечатване на съобщението'
Сега bob има следните ангажименти в тест клон.
Сега bob избутва тестовия клон към отдалеченото хранилище на Git.
$ git push тест за произход
Сега Боб ви се обажда и ви разказва за страхотните промени, които направи. И така, изтеглихте промените в отдалеченото хранилище на Git в собственото си локално хранилище.
$ git fetchСега виждате нов клон произход / тест.
Намерихте и 3 нови ангажименти, направени от bob.
$ git log --oneline произход / тест
Сега бихте искали да знаете какви промени направи bob.
$ git log -p произход / тест
Решавате да не замените връщаната стойност с EXIT_SUCCESS, както направи bob.
Харесва ви концепцията за използване на функция за отпечатване на съобщения.
Харесвате и този ангажимент.
И така, искате да обедините 2 от направените bob 3 комита. Ако сте използвали git merge за обединяване на клоновия тест, тогава ще бъдат приложени всичките 3 фиксации. Но с функцията git cherry pick можете да обединявате само ангажиментите, които ви харесват.
Имайте предвид, че когато правите ангажименти за избор на череши в Git, винаги започвате с най-стария ангажимент и преминавате напред към най-новия.
Преди, аз череша, набра основен.° С файл изглежда по следния начин.
Сега, нека черешата избере най-стария от 2те ангажименти, 9a4e532, както следва:
$ git cherry-pick 9a4e532
Конфликт на сливане! Това може да се случи.
Сега отворете основен.° С файл и коригирайте конфликта на сливане.
Окончателният файл трябва да изглежда както следва.
Сега добавете промените към подреждането.
$ git add.
Сега ангажирайте промените, както следва:
$ git cherry-pick - продължи
ЗАБЕЛЕЖКА: Можете също да използвате git commit и тук. От теб зависи. предпочитам git cherry-pick-продължи тъй като автоматично ще използва съобщението за фиксиране от коммита Аз съм череша.
Сега въведете съобщението си за ангажиране тук и запазете файла.
Трябва да се добави нов ангажимент.
Сега, череша изберете следващия ангажимент, както следва:
$ git cherry-pick 08ba5e7
Няма конфликт на сливане. Страхотен! Новият ангажимент трябва да бъде добавен автоматично.
Както виждате, получавам точно това, което исках. Обединих само ангажиментите, от които имах нужда.
И така, вие избирате череши в Git. Благодаря, че прочетохте тази статия.