Artikkeli Git from the bottom up kuvailee seikkaperäisesti Git-versiohallinnan rakenteen, joka muodostuu pelkästään blob-, tree- ja commit-objekteista. Artikkelin lukemalla oivaltaa nopeasti, mitä monet Gitin antamat mystiset virheilmoitukset oikeastaan tarkoittavat, mikä on HEAD ja mikä on master, ja niin edelleen.

Omana lyhyenä yhteenvetona voin tiivistää, että Gitissä on todellakin vain kolmenlaisia dataobjekteja:

  • Blob on yhden tiedoston sisältö.
  • Tree on kokoelma blobeja (tiedostoja) ja toisia tree-objekteja (alihakemistoja).
  • Commit on projektin tila tiettynä ajanhetkenä, koostuen tilan kuvaavasta tree-objektista sekä mahdollisista parent- ja child-commiteista.

Versiohallinnan historia muodostuu commit-objektien parent-suhteista. Seuraamalla parent-ketjua alkuun asti voi käydä läpi koko historian.

  • Yhdellä commitilla voi olla myös useita parentteja. Tätä käytetään kuvaamaan mergejä, eli kahden eri kehityshaaran yhdistymistä yhdeksi commitiksi.
  • Yhdellä commitilla voi olla myös useita childejä. Se taas kuvaa branchia, eli kehityksen haarautumista useaksi eri commitiksi.

Kun tämän aikajanan rakenteen ymmärtää, on paljon helpompi hahmottaa Gitin käyttämien termien ja komentojen logiikka. Erityisesti on hyvä huomata se, että mitään erillisiä branch-rakenteita ei ole olemassa. On vain läjä committeja, jotka ovat parent- ja child-suhteessa toisiinsa, ja joihin viitataan symbolisesti esimerkiksi master- ja HEAD-nimillä.