Kurssisisältö
Githubin Perusteet
Githubin Perusteet
Uudelleensijoittamisen Perusteet
Commitin tekeminen main-haarassa
Aloitetaan tekemällä commit suoraan etäpalvelimen main
-haaraan muokkaamalla README.md
-tiedostoa etävarastossa. Tämä aiheuttaa sen, että main
-haaran ja feature/payment
-haaran commit-historiat eroavat toisistaan.
Tässä on tiedostoon lisätty rivi:
Tässä on vastaava commit-viesti:
Uudelleenasemoinnin ymmärtäminen
Kuten mainittiin edellisessä luvussa, kun feature-haara on tarkistettu ja testattu, se voidaan ja tulisi yhdistää takaisin main
-haaraan. Tähän asti olemme käyttäneet tähän tarkoitukseen vain git merge
-komentoa. Toinen vaihtoehto on kuitenkin käyttää git rebase
-komentoa.
Rebase tarkoittaa sarjan committien siirtämistä tai yhdistämistä uuteen pohja-commitiin. Tämä tehdään toistamalla muutokset yhdestä haarasta toiseen, jolloin syntyy lineaarinen commit-historia.
Kun luomme haaran, Git seuraa uusinta committia molemmissa haaroissa. Jos vain toisessa haarassa on uusia muutoksia, Git voi siirtyä eteenpäin ja ottaa muutokset käyttöön. Jos molemmissa haaroissa on uusia muutoksia, Git luo uuden yhdistämiscommitin, jolloin syntyy kolmisuuntainen yhdistäminen.
Tältä kolmisuuntainen yhdistäminen näyttäisi meidän tapauksessamme, jossa C4 oli viimeisin commit feature/payment
-haarassa ennen yhdistämistä:
Kolmitiekäytössä tapahtuvat yhdistämiset voivat kuitenkin vaikeuttaa virheiden jäljittämistä hajautetun, epälineaarisen historian vuoksi. Käyttämällä rebase-toimintoa muutamme committiemme pohjan ja toistamme ne uuden pohjan päälle, jolloin Git voi suorittaa fast-forward-yhdistämisen ja säilyttää lineaarisen historian.
Alla oleva animaatio havainnollistaa, miten rebase voidaan suorittaa tässä tapauksessa (commit-tunnisteet eivät vastaa todellisia tunnisteita):
Kun rebase-toimintoa käytetään haaralle, sen historia kirjoitetaan uudelleen. Tämä tarkoittaa, että vanhat commitit korvataan uusilla, joilla on eri tunnisteet (hash-summat), koska ne perustuvat eri koodin tilannekuviin. Kuten yllä olevassa animaatiossa näkyy, feature/payment
-haaran commitin tunniste muuttui rebasaamisen jälkeen.
Kiitos palautteestasi!