Hvordan kirsebærplukk i git

Hvordan kirsebærplukk i git
Git Cherry Pick er et sammenslåing av Git. Men det er en liten forskjell i git kirsebærplukk og git fusjon. Brukssaken er også forskjellig. La oss se hvordan Git Merge fungerer først, og sammenligner den med Git Cherry Pick. På den måten vil du forstå når du skal bruke Git Merge og når du skal bruke Git Cherry Pick.

La oss si, du har et git -depot. Du jobber med herre gren og du har gjort noen få forpliktelser (A, B og C) på herre gren også.

Nå, plutselig har du en god idé. Så du oppretter en annen gren Newidea. Deretter begynte du å gjøre forpliktelser (E, f og g) der.

Du gjorde også noen endringer i herre filial igjen og la til en ny forpliktelse H.

Nå, hvis den nye ideen din er en suksess, kan det være lurt å slå sammen Newidea gren til herre gren. La oss si, du slo det sammen. Det vil skape en ny forpliktelse Jeg Som du kan se på figuren nedenfor. Den nye forpliktelsen vil inneholde alt (alle endringene i forpliktelsene E, F, og G) av grenen Newidea.

La oss si, du vil ikke slå sammen alle grenens forpliktelser Newidea til herre gren. Du vil bare slå sammen endringene (bare diffendringene) i forpliktelsen F til herre gren. Det er her Git Cherry Pick kommer inn. Git Cherry Pick lar deg gjøre det. Du finner bare hashen av forpliktelsen du vil kirsebærplukke og bruke den på grenen du vil ha. Veldig enkelt.

I denne artikkelen skal jeg vise deg hvordan du kan velge i Git. Så la oss komme i gang.

Git Cherry Pick Workflow:

I dette avsnittet skal jeg sette opp et Git -depot på en måte som du vil forstå hvorfor Git Cherry Pick brukes og hvordan du kan velge kirsebær i Git.

Først initialiser et tomt git -depot kirsebær-pick-demo/ følgende:

$ git init cherry-pick-demo

Naviger nå til depotet som følger:

$ CD Cherry-Pick-Demo/

Nå, lage en hoved-.c fil med følgende innhold:

Legg nå filen til iscenesettelsesområdet som følger:

$ git Legg til .

Nå, forplikte endringene som følger:

$ git commit -m 'initial commit'

Nå, lage en .Gitignore fil med følgende innhold:

Legg filen til iscenesettelsesområdet.

$ git Legg til .

Begå endringene:

$ git commit -m 'lagt til .gitignore fil '

Som du kan se, har jeg to forpliktelser nå i min herre gren.

$ git log --oneline

Nå, jeg vil presse mitt lokale Git -depot til en ekstern Git -server, slik at andre mennesker kan jobbe med dette depotet. Du kan også bruke GitHub her. Jeg vil bruke en lokal SSH -server for dette her inne.

Så legg til en ekstern URL -URL som følger:

$ git eksternt legg til opprinnelse [email protected]: ~/kirsebær-pick-demo.git

Nå, skyv herre Gren til det eksterne Git -depotet som følger:

$ git push origin master

Nå, la oss si Bob ønsker å bidra til prosjektet. Så han klonet Git -depotet på datamaskinen sin.

$ git clone [email protected]: ~/kirsebær-pick-demo.git myproject

Nå navigerer Bob til prosjektkatalogen sin.

$ CD MyProject/

Han har også de to forpliktelsene som jeg har lagt til.

$ git log --oneline

Nå lager Bob en test gren for å prøve ut ideene sine.

$ git kassa -b -test

Han bestemmer seg for å endre returverdien med en konstant Exit_success fra stdlib bibliotek.

Han legger til endringene i iscenesettelsesområdet.

$ git Legg til .

Begår endringene.

$ git commit -m 'brukt exit_success i stedet for 0 som returverdi'

Nå bestemmer han seg for å bruke en funksjon PrintMessage () For å skrive ut meldingen. Så han skriver funksjonen.

Han begår endringene igjen.

$ git Legg til .
$ git commit -m 'lagt til PrintMessage () funksjon'

Deretter bruker Bob funksjonen i programmet.

Han begår endringene igjen.

$ git Legg til .
$ git commit -m 'brukt printMessage () -funksjon for å skrive ut meldingen'

Nå har Bob følgende forpliktelser i test gren.

Nå skyver Bob testgrenen til Git Remote Repository.

$ git push origin test

Nå ringer Bob deg og forteller deg om de fantastiske endringene han gjorde. Så du hentet endringene i Git Remote Repository til ditt eget lokale depot.

$ git hente

Nå ser du en ny gren opprinnelse/test.

Du fant også 3 nye forpliktelser som Bob gjorde.

$ git log -Origine Origin/Test

Nå vil du vite hvilke endringer Bob gjorde.

$ git log -p opprinnelse/test

Du bestemmer deg for ikke å erstatte returverdien med exit_success som Bob gjorde.

Du liker konseptet med å bruke en funksjon for å skrive ut meldinger.

Du liker denne forpliktelsen også.

Så du vil slå sammen 2 av de 3 forpliktelsene Bob Made. Hvis du har brukt Git -sammenslåing for å slå sammen grentesten, vil alle tre forpliktelsene bli brukt. Men med Git Cherry Pick -funksjonen kan du bare slå sammen forpliktelsene du liker.

Legg merke til at når du kirsebærplukker forpliktelser i git, starter du alltid med den eldste forpliktelsen og går videre til det nyeste lite etter litt.

Før valgte jeg kirsebær, hoved-.c Filen ser ut som følger.

La oss nå velge den eldste av de to forpliktelsene, 9A4E532 som følger:

$ git cherry-pick 9a4e532

En sammenslåingskonflikt! Dette kan skje.

Nå, åpne hoved-.c fil og fikse sammenslåingskonflikten.

Den endelige filen skal se ut som følger.

Legg nå endringene i iscenesettelsesområdet.

$ git Legg til.

Nå, forplikte endringene som følger:

$ git cherry-pick--continue

MERK: Du kan også bruke git forpliktelse Her også. Det er opp til deg. jeg foretrekker Git kirsebær -pick -kontinuerlig Ettersom det automatisk vil bruke Commit -meldingen fra Commit I er kirsebærplukking.

Skriv inn forpliktelsesmeldingen din her og lagre filen.

En ny forpliktelse bør legges til.

Nå velger Cherry neste forpliktelse som følger:

$ git cherry-pick 08ba5e7

Ingen sammenslåingskonflikt. Flott! En ny forpliktelse bør legges til automatisk.

Som du ser, får jeg akkurat det jeg ville. Jeg slo bare sammen forpliktelsene som jeg trengte.

Så det er slik du kirsebærplukker i git. Takk for at du leste denne artikkelen.