Qu'est-ce que Git ?
Git est un systeme de controle de version distribue, cree par Linus Torvalds en 2005 pour le developpement du noyau Linux. C'est l'outil de versioning le plus utilise au monde, adopte par la quasi-totalite des projets logiciels. Git permet de suivre l'historique des modifications du code, de collaborer efficacement en equipe, et de gerer plusieurs versions d'un projet simultanement.
Architecture distribuee
Contrairement aux systemes centralises (SVN, CVS), Git est distribue : chaque developpeur possede une copie complete du depot (historique inclus). Cela permet de travailler hors-ligne, d'avoir un backup naturel, et d'experimenter sans risque. Le depots distant (GitHub, GitLab, Bitbucket) sert de point de synchronisation mais n'est pas un point de defaillance unique.
Concepts fondamentaux
Le working directory contient les fichiers modifiables. Le staging area (index) prepare le prochain commit avec git add. Un commit est un snapshot immutable de l'etat du projet avec un hash SHA-1 unique, un message, un auteur et un pointeur vers le(s) commit(s) parent(s). Les branches sont des pointeurs legers vers un commit, permettant le developpement parallele. HEAD pointe vers la branche ou le commit actuel.
Branching et collaboration
Les branches Git sont legeres et rapides a creer. Les strategies de branching incluent Git Flow (branches main, develop, feature, release, hotfix), GitHub Flow (main + feature branches + pull requests), et Trunk-Based Development (commits directs sur main avec feature flags). Les pull requests (ou merge requests) sont le mecanisme central de revue de code en equipe. Les merge (fusion) et rebase (rebase) sont les deux strategies pour integrer les changements entre branches.
Commandes essentielles
Les commandes les plus utilisees couvrent le cycle de travail quotidien : git clone, git pull (recuperer), git branch, git checkout/switch (naviguer), git add, git commit (sauvegarder), git push (partager), git merge/rebase (integrer), git log, git diff (inspecter), git stash (mettre de cote), et git bisect (trouver un bug par dichotomie). La maitrise de git rebase -i (rebase interactif) et git reflog (historique de toutes les actions) distingue les utilisateurs avances.