Git

Hoe kersen plukken in Git

Hoe kersen plukken in Git
git cherry pick is een samenvoegfunctie van Git. Maar er is een klein verschil tussen git cherry pick en git merge. Ook is de use case anders. Laten we eerst eens kijken hoe git merge werkt, en het dan vergelijken met git cherry pick. Op die manier zul je begrijpen wanneer je git merge moet gebruiken en wanneer je git cherry pick moet gebruiken.

Laten we zeggen dat je een Git-repository hebt. Je werkt aan de meester branch en je hebt een paar commits gemaakt (A, B en C) op de meester tak ook.

Nu heb je ineens een geweldig idee. Dus je maakt een andere tak aan nieuw idee. Toen begon je commits te maken (E, F en G) Daar.

U heeft ook enkele wijzigingen aangebracht in de meester branch opnieuw en een nieuwe commit toegevoegd H.

Nu, als je nieuwe idee een succes is, dan wil je misschien de nieuw idee aftakking naar de meester Afdeling. Laten we zeggen, je hebt het samengevoegd. Het zal een nieuwe commit maken ik zoals je kunt zien in de onderstaande afbeelding. De nieuwe commit zal alles bevatten (alle wijzigingen in de commits E, F, en G) van het filiaal nieuw idee.

Laten we nu zeggen dat je niet alle commits van de branch wilt mergen nieuw idee naar de meester Afdeling. Je wilt alleen de wijzigingen (alleen de diff wijzigingen) samenvoegen in de commit F naar de meester Afdeling. Dit is waar git cherry pick om de hoek komt kijken. Met Git cherry pick kun je dat doen. Je vindt gewoon de hash van de commit die je wilt uitkiezen en past deze toe op de branch die je wilt. Erg makkelijk.

In dit artikel laat ik je zien hoe je kersen kunt plukken in Git. Dus laten we beginnen.

Git Cherry Pick-workflow:

In deze sectie ga ik een Git-repository opzetten op een manier dat je zult begrijpen waarom git cherry pick wordt gebruikt en hoe je cherry pick in Git.

Initialiseer eerst een lege Git-repository cherry-pick-demo/ als volgt:

$ git init cherry-pick-demo

Navigeer nu als volgt naar de repository:

$ cd cherry-pick-demo/

Maak nu een hoofd.c bestand met de volgende inhoud:

Voeg het bestand nu als volgt toe aan het verzamelgebied:

$ git toevoegen .

Leg de wijzigingen nu als volgt vast:

$ git commit -m 'initiële commit'

Maak nu een .gitignore bestand met de volgende inhoud:

Voeg het bestand toe aan het verzamelgebied.

$ git toevoegen .

Voer de wijzigingen door:

$ git commit -m 'toegevoegd .gitignore-bestand'

Zoals je kunt zien, heb ik nu 2 commits in mijn meester Afdeling.

$ git log --oneline

Nu wil ik mijn lokale Git-repository naar een externe Git-server pushen zodat andere mensen aan deze repository kunnen werken. Je kunt GitHub hier ook gebruiken. Ik zal hier een lokale SSH-server voor gebruiken.

Voeg dus als volgt een externe Git-repository-URL toe:

$ git remote voeg oorsprong toe [email protected]:~/cherry-pick-demo.git

Druk nu op de meester vertakking naar de externe Git-repository als volgt:

$ git push origin master

Nu, laten we zeggen bob wil bijdragen aan het project. Dus kloonde hij de Git-repository op zijn computer.

$ git kloon [email protected]:~/cherry-pick-demo.git mijnproject

Bob navigeert nu naar zijn projectdirectory.

$ cd mijnproject/

Hij heeft ook de 2 commits die ik heb toegevoegd.

$ git log --oneline

Bob maakt nu een test tak om zijn ideeën uit te proberen.

$ git checkout -b test

Hij besluit de retourwaarde te veranderen met een constante EXIT_SUCCESS van de stdlib bibliotheek.

Hij voegt de wijzigingen toe aan het verzamelgebied.

$ git toevoegen .

Legt de wijzigingen vast.

$ git commit -m 'gebruikte EXIT_SUCCESS in plaats van 0 als de retourwaarde'

Nu besluit hij een functie te gebruiken printMessage() om het bericht af te drukken. Dus, hij schrijft de functie.

Hij begaat de wijzigingen opnieuw.

$ git toevoegen .
$ git commit -m 'functie printMessage() toegevoegd'

Dan gebruikt bob de functie in het programma.

Hij begaat de wijzigingen opnieuw.

$ git toevoegen .
$ git commit -m 'gebruikte de functie printMessage() om het bericht af te drukken'

Bob heeft nu de volgende commits in de test Afdeling.

Bob duwt nu de testbranch naar de Git remote repository.

$ git push oorsprongstest

Bob belt je nu en vertelt je over de geweldige veranderingen die hij heeft aangebracht. Dus je hebt de wijzigingen in de externe Git-repository opgehaald naar je eigen lokale repository.

$ git fetch

Nu zie je een nieuwe tak herkomst/test.

Je hebt ook 3 nieuwe commits gevonden die bob heeft gemaakt.

$ git log --oneline origin/test

Nu wil je weten welke veranderingen bob heeft gemaakt.

$ git log -p origin/test

U besluit de geretourneerde waarde niet te vervangen door EXIT_SUCCESS zoals Bob deed.

Je houdt van het concept om een ​​functie te gebruiken om berichten af ​​te drukken.

Vind jij deze commit ook leuk.

Dus je wilt 2 van de 3 commits samenvoegen die bob gemaakt heeft. Als je git merge hebt gebruikt om de branch-test samen te voegen, dan zouden alle 3 de commits worden toegepast. Maar met de git cherry pick-functie kun je alleen de commits samenvoegen die je leuk vindt.

Merk op dat wanneer je commits kiest in Git, je altijd begint met de oudste commit en beetje bij beetje vooruitgaat naar de nieuwste.

Vroeger, ik kers geplukt, de hoofd.c bestand ziet er als volgt uit:.

Laten we nu de oudste van de 2 commits, 9a4e532 als volgt kiezen:

$ git cherry-pick 9a4e532

Een samenvoegconflict! Dit kan gebeuren.

Open nu de hoofd.c bestand en los het samenvoegconflict op.

Het uiteindelijke bestand zou er als volgt uit moeten zien:.

Voeg nu de wijzigingen toe aan het verzamelgebied.

$ git toevoegen.

Leg de wijzigingen nu als volgt vast:

$ git cherry-pick --ga verder

OPMERKING: Je kan ook gebruiken git commit hier ook. Het is aan u. ik geef de voorkeur aan git cherry-pick -continue omdat het automatisch het commit-bericht van de commit zal gebruiken. Ik ben cherrypicking.

Typ nu hier je commit-bericht en sla het bestand op.

Er moet een nieuwe commit worden toegevoegd.

Kies nu de volgende commit als volgt:

$ git cherry-pick 08ba5e7

Geen samenvoegconflict. Super goed! Er moet automatisch een nieuwe commit worden toegevoegd.

Zoals je kunt zien, krijg ik precies wat ik wilde. Ik heb alleen de commits samengevoegd die ik nodig had.

Dus, zo pluk je in Git. Bedankt voor het lezen van dit artikel.

Top Oculus App Lab-games
Als je eigenaar bent van een Oculus-headset, moet je op de hoogte zijn van sideloading. Sideloading is het proces van het installeren van niet-winkeli...
Top 10 spellen om te spelen op Ubuntu
Het Windows-platform is een van de dominante platforms voor gaming geweest vanwege het enorme percentage games dat tegenwoordig wordt ontwikkeld om Wi...
5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...