Git on meille tuttu – miten se oikeasti toimii?

30.09.2025

Tällä kertaa tarkastelussa Git-versiohallinta. Kirjoitus sai inspiraationsa Codegardenissa kuullusta Soumaya Erradin luennosta "Mastering Git".

Git on hajautettu versionhallintajärjestelmä, jota käytetään ohjelmistokehityksessä seuraamaan ja hallitsemaan muutoksia lähdekoodissa. Käytämme sitä päivittäin. Ymmärrämme perusasioita, kuten "mitä on merge" tai "miten branchit toimivat". Ymmärrämmekö, miksi Git toimii niin kuin se toimii? Olet ehkä kuullut lausahduksen: "Jokainen commit on koko koodipohjan tilannekuva." Miksi sillä sitten on väliä?

 

Tilannekuvia, ei pelkkiä muutoksia

Yleinen väärinkäsitys on, että Git tallentaa jokaisessa commitissa vain muutokset edelliseen versioon verrattuna – eli diffit. Tämä vaikuttaisi loogiselta ja tehokkaalta, mutta Git ei toimi ihan näin. Sen sijaan Git ottaa tilannekuvan koko projektihakemistosta jokaisen commitin yhteydessä. Älykäs se toki on – se ei tallenna samoja tiedostoja uudestaan, jos niiden sisältö ei ole muuttunut. Sen sijaan Git viittaa aiemmin tallennettuun objektiin (blobiin), jos sisältö pysyy samana. Toisin sanoen, jokainen commit on kuin valokuva projektistasi tiettynä hetkenä – ei vain lista muutoksista.

 

Miksi tällä on väliä?

  • Nopeus ja tehokkuus: Kun haet commitin tilaa, Git voi yksinkertaisesti lukea suoraan snapshotin – ei tarvitse käydä koko historiaa läpi diffien kautta
  • Helpompi haarojen ja mergejen hallinta: Branchit ovat vain osoittimia committeihin. Koska commitit sisältävät täydet snapshotit, merge-toiminnot vertaavat kokonaisia hakemistorakenteita
  • Muuttumattomuus tuo luotettavuutta: Kun commit on tehty, se on muuttumaton. Tämä takaa sen, että historia säilyy eheänä ja toistettavana
  • Joustavuus kehittäjälle: Komennot kuten git reset, git cherry-pick ja git rebase ovat mahdollisia, koska commitit ovat itsenäisiä snapshotteja. Niitä voi siirtää ja muokata vapaasti ilman, että järjestelmä hajoaa  

Kun asiaa katsoo tarkemmin, Git ei ole pelkkä versionhallintatyökalu – se on sisältöön perustuva tiedostojärjestelmä, jossa on versionhallinta sisäänrakennettuna.

Yhteenveto

Ensi kerralla kun teet commitin, älä ajattele vain "tallennan työni". Ajattele: "Otan täydellisen ja muuttumattoman tilannekuvan koko projektistani – valmiina tutkittavaksi, jaettavaksi tai palautettavaksi koska tahansa." Tämän perusidean ymmärtäminen muuttaa koko suhtautumisesi Gitiin – ja antaa sinulle uusia valmiuksia hyödyntää sitä täysillä.

 
Ota meihin yhteyttä, niin muutetaan ideasi ratkaisuiksi!