Pour bien comprendre les commandes de Git, il est souvent utile de comprendre ses mécanismes internes. Dans cette partie, je vais te montrer que, malgré sa complexité apparente avec toutes ses commandes et ses options, le fonctionnement interne de Git est simple.

Linus Torvalds, l'inventeur de Git, est parti d'un constat simple : on gère des fichiers et répertoires, donc autant les représenter comme un système de fichiers. 

Un dépôt Git contient ainsi 4 types d'objets principaux. Au plus bas niveau, les fichiers sont représentés par des objets appelés "blobs", un terme usuel en informatique qui signifie Binary Large OBjects. Chaque répertoire est représenté par un objet "tree", et décrit les blobs et autres trees qu'il contient. Viennent ensuite les objets de niveau supérieur, à savoir les commits et les tags, qui représentent le graphe d’historique et les méta-données, c'est-à-dire les informations descriptives : le message, la date, l'auteur, le commiteur etc. On parle aussi d'objets commit-ish et tree-ish.

Commit-ish désigne tout ce qui se rapporte directement ou indirectement à un commit, on ne s’y attendait pas. On trouve donc les commits et les tags.

Et un tree-ish concerne tout ce qui se rapporte à, attention suspens, un objet de type tree, c'est-à-dire les trees eux-même et les commit-ish.