Ką reiškia „vyšnių rinkėjas“?

Neseniai buvau pakviestas į cherry-pick rinkinį.

Taigi ką reiškia git cherry picking? Kaip tai padaryti?

1623
18 февр. Rahul nustatė vasario 18 d 2012-02-18 10:20 '12 10:20 2012-02-18 10:20
@ 9 atsakymai

Pasirinkus vyšną „Git“, pasirenkamas įsipareigojimas iš vieno filialo ir jo taikymas kitam.

Tai prieštarauja kitiems būdams, pvz., merge ir rebase kurie paprastai taikomi daugeliui kitų filialų.

  1. Įsitikinkite, kad esate filiale, į kurį norite įsipareigoti.

     git checkout master 
  2. Atlikite šiuos veiksmus:

     git cherry-pick <commit-hash> 

Nb:

  1. Jei pasirinksite vyšnį iš viešojo filialo, turėtumėte apsvarstyti galimybę naudoti

     git cherry-pick -x <commit-hash> 

    Taip bus sukurtas standartizuotas įsipareigojimo pranešimas. Tokiu būdu jūs (ir jūsų kolegos) vis dar galite sekti įsipareigojimo kilmę ir išvengti būsimų sujungimų konfliktų.

  2. Jei turite užrašų, pridedamų prie įsipareigojimo, jie nesilaiko vyšnių. Jei norite juos perkelti, turite naudoti:

     git notes copy <from> <to> 

Papildomos nuorodos:

1957 m
18 февр. Philip Fourie atsakė vasario 18 d 2012-02-18 10:29 '12, 10:29 2012-02-18 10:29

Ši citata yra paimta iš; Versija Valdymas su „Git“ (tikrai puiki knyga, rekomenduoju jį nusipirkti, jei domina git)

Pakeisti: kadangi šis atsakymas vis dar daro įspūdį, norėčiau į vaizdo įrašą įtraukti labai malonų:

„YouTube“: įvadas į „Git“ vyšnių rinkinį

Naudojant „git cherry-pick“ komandą „Git cherry-pick“ įpareigoja atlikti pakeitimus, kuriuos paskyrė įsipareigoja dabartiniam filialui. Jis pateiks aiškią naują fiksaciją. Griežtai kalbant, „git cherry-pick“ naudojimas nekeičia esamos istorijos saugykloje; vietoj to jis papildo istoriją. Kaip ir kitose „Git“ operacijose, kurios atlieka pakeitimus skirtingame procese, gali tekti išspręsti konfliktus, kad būtų visiškai pritaikyti šio įsipareigojimo pakeitimai . Git cherry-pick komanda dažniausiai naudojama įvesti tam tikrus įsipareigojimus iš vieno filialo į saugyklą į kitą filialą. Įprasta priekinio arba galinio prievado panaudojimas atsiranda nuo paslaugų padalinio iki plėtros padalinio.

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

į: 2019

221
13 мая '15 в 18:06 2015-05-13 18:06 Atsakymą pateikė Teoman shipahi gegužės 15-15 dienomis 18:06 2015-05-13 18:06

Vyšnių pasirinkimas „Git“ yra skirtas tam tikram fiksavimui iš vienos šakos į kitą. Tai galima padaryti, jei, pvz. padarė klaidą ir perėjo prie neteisingo filialo, bet nenori sujungti viso filialo. Galite tiesiog, pavyzdžiui. sugrąžinti fiksaciją ir vyšnį į kitą šaką.

Kad galėtumėte jį naudoti, jums reikia git cherry-pick hash , kur hash yra kitos filialo įsipareigojimas.

Visą procedūrą žr. Http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html

137
18 февр. Atsakymas duotas Tadeckui 18 vasario mėn. 2012-02-18 10:29 '12, 10:29 2012-02-18 10:29

„Cherry-pick“ yra „Git“ funkcija. Jei kas nors nori prisiimti tam tikrus įsipareigojimus viename filiale kiekvienam tikslui, tada naudojamas vyšnių pasirinkimas.
Git-cherry-pick žingsniai yra tokie, kaip nurodyta toliau.

  1. Checkout (eiti į) tikslinę filialą.
  2.  git cherry-pick <commit id> 

    Čia įsipareigojimo ID yra kito filialo veiklos identifikatorius, pvz.

     git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f 
  3. spustelėkite tikslinę šaką

Eikite į https://git-scm.com/docs/git-cherry-pick

37
24 авг. atsakymą pateikė Vijay SB 24 rug. 2016-08-24 12:39 '16 at 12:39 2016-08-24 12:39

Čia yra grafinis būdas, tikiuosi, kad tai padės žmonėms suprasti, kad vyšnios yra geriau:

Git grafinis aiškinimas vyšnių modelis

23
20 марта '15 в 3:56 2015-03-20 03:56 atsakymą pateikė Matt kovo 20 d. 15 val. 3:56 2015-03-20 03:56

Galbūt manote, kad vyšnios yra pasirinktos kaip falsifikuotos, o tai yra kontroliuojama kaip peregaze. Tai reiškia, kad jis priima esamą fiksaciją ir ją atkuria kaip šakos, kurioje esate dabar, vadovo pradžios tašką.

rebase atlieka pataisą, rebase X tėvą, ir regeneruoja pataisą taip, tarsi Y patronuojanti įmonė būtų iš tikrųjų, ir tai yra būtent tai, ką cherry-pick .

Vyšnios pasirinkti daugiau apie tai, kaip pasirenkate. Perkeliant (perkeliant), git netiesiogiai atkuria jūsų vietinius įsipareigojimus ant to, ką jis įtraukia į savo šaką, tačiau, naudodamiesi cherry-pick jūs aiškiai pasirinksite kai kurias fiksacijas ir netiesiogiai jas atkuriate (dabartines) savo dabartinio filialo viršuje.

Taigi, kaip jūs darote, tai yra kitokia, bet po gaubtu jie labai panašūs į operacijas - atsidavimo regeneravimą.

14
01 февр. Atsakymas duotas Hugh 01 Feb. 2017-02-01 01:19 '17 at 1:19 2017-02-01 01:19

Trumpas situacijos, kai jums reikia pasirinkti vyšnį, pavyzdys

Apsvarstykite šį scenarijų. Jūs turite dvi šakas.

a) release1 - ši gija siunčiama jūsų klientui, tačiau vis dar yra klaidų, kurias reikia ištaisyti.

b) kapitonas - klasikinis pagrindinis filialas, kuriame, pavyzdžiui, galite pridėti funkcionalumą2.

Dabar : Jūs išsprendžiate kažką spaudai1 . Žinoma, tai taip pat reikia pataisyti vedlyje . Ir tai yra tipiškas atvejis vyšnių rinkimui. Taigi, pasirinkus vyšną šiame scenarijuje, jūs prisiimate įsipareigojimą iš išleidimo1 ir įtraukiate jį į pagrindinį filialą.

10
11 дек. Daniel Perník atsakymas gruodžio 11 d 2018-12-11 16:00 18 m. 18 val. 2018-12-11 16:00

Tai tarsi kopijuoti (iš kažkur) ir įklijuoti (kažkur), bet tam tikriems įsipareigojimams.

Pavyzdžiui, jei norite atlikti karštą pataisymą, galite naudoti „ cherry-pick funkciją.

Padarykite savo cherry-pick vystymosi šakoje ir merge jį su išleidimo filialu. Panašiai, išleiskite iš išleidimo šakos, kad jį pasiektumėte. Voila

7
07 окт. Atsakymas Ajeet Sharma 07 spalis 2016-10-07 14:55 '16 at 14:55 pm 2016-10-07 14:55

Kai dirbate su projekto vystymo komanda, valdyti pokyčius keliuose git filialuose gali būti nelengvas uždavinys. Kartais nenorite sujungti viso filialo į kitą, ir jums reikia tik pasirinkti vieną ar du konkrečius įsipareigojimus. Šis procesas vadinamas „vyšnių rinkimu“.

Išsamiau rasite puikų straipsnį apie vyšnių surinkimą: https://www.previousnext.com.au/blog/intro-cherry-picking-git

0
21 янв. atsakymas duotas wolfack 21 Jan 2019-01-21 11:30 '19, 11:30, 2019-01-21 11:30

Kiti klausimai apie žymes arba užduoti klausimą