Kaip sujungti konkretų įvykį „Git“

Aš padalinu filialą iš kapinyno į GitHub ir padariau kažką specifinio man. Dabar pastebėjau, kad šaltinio saugykla turėjo gerą savybę, kuri buvo HEAD .

Noriu jį sujungti tik be ankstesnių įsipareigojimų. Ką turėčiau daryti? Žinau, kaip sujungti visus įsipareigojimus:

 git branch -b a-good-feature git pull repository master git checkout master git merge a-good-feature git commit -a git push 
714
19 мая '09 в 8:27 2009-05-19 08:27 „Netawater“ yra nustatytas gegužės 19 d ., 08:27, 08: 27-09: 27
@ 3 atsakymai

git cherry-pick “ turėtų būti jūsų atsakymas.

Taikykite esamų įsipareigojimų pakeitimą.

Būtinai perskaitykite bdonlano atsakymą apie vyšnių rinkimo pasekmes šiame pranešime:
"Ištraukite visus filialo įrašus, paspauskite nurodytus įrašus" , kur:

 A-----B------C \ \ D 

tampa:

 A-----B------C \ \ D-----C' 

Su šiuo įsipareigojimu susijusi problema yra ta, kad git mano, kad įsipareigojimas apima visą jų istoriją

Kur C 'turi skirtingą SHA-1 identifikatorių.
Panašiai vyšnios, paimančios fiksaciją iš vienos šakos į kitą, iš esmės apima pleistro sukūrimą ir taikymą, taip pat praradimą.

Šis įsipareigojimo identifikatorių pakeitimas be kita ko pertraukia „git“ susijungimo funkciją (nors jei jį naudosite taupiai, tai yra heuristinis, kuris tai apdoros). Dar svarbiau, kad ji ignoruoja funkcines priklausomybes - jei C iš tikrųjų naudojo funkciją, apibrėžtą B, jūs niekada nežinote .

874
19 мая '09 в 8:35 2009-05-19 08:35 atsakymą pateikė VonC gegužės 19 d., 09:35 , 2009-05-19 08:35

Galite naudoti „git cherry-pick“, kad galėtumėte taikyti atskirą įsipareigojimą savo dabartiniam filialui.

border=0

Pavyzdys: git cherry-pick d42c389f

458
19 мая '09 в 8:35 2009-05-19 08:35 atsakymas pateikiamas bdonlan gegužės 19 d., 08:35, 2009-05-19 08:35

Pabandykime paimti pavyzdį ir suprasti:

Turiu filialą, tarkim, šeimininką , nurodydamas X <commit-id>, ir turiu naują filialą, nukreipiantį į Y <sha1>.

Kai Y yra <commit-id> = <master> filialas nutraukiamas - keli įsipareigojimai

Dabar sakykime, kad Y filialui turiu uždaryti įsipareigojimus tarp pagrindinio filialo ir naujo filialo. Toliau pateikiama procedūra, kurią galime atlikti:

1 veiksmas:

 git checkout -b local origin/new 

vietinis - filialo pavadinimas. Galite nurodyti bet kokį pavadinimą.

2 veiksmas:

  git merge origin/master --no-ff --stat -v --log=300 

Kombinuoti iš pagrindinio filialo prisiima naujas filialas, taip pat sukurkite komandą, skirtą fiksuoti žurnalo pranešimą su vieno eilutės aprašymais, kuriuose yra ne daugiau kaip <n> faktiniai įsipareigojimai.

Norėdami gauti daugiau informacijos ir parametrų „Git“ sujungimo, žr.

 git merge --help 

Be to, jei reikia sujungti konkretų įvykį, galite naudoti:

 git cherry-pick <commit-id> 
7
27 мая '16 в 8:29 2016-05-27 08:29 atsakymą pateikė vartotojo3799762 gegužės 27 d., 16 d., 8:29 2016-05-27 08:29

Kiti klausimai apie žymes arba Užduoti klausimą