🧭 Introduction
Git est un système de contrôle de version distribué.
Git facilite la collaboration, le suivi des modifications et la traçabilité complète de toutes les versions du projet.
Enfin, il permet de gérer les livraisons logicielles de manière rigoureuse grâce aux mécanismes de tags et de releases.
C’est un outil puissant qui permet de capitaliser et de partager du code de manière efficace.
Grâce à sa gestion fine de l’historique (notamment via le rebase interactif), il contribue à produire un code plus propre et plus qualitatif.
Un historique propre et cohérent inspire confiance, il témoigne d’un code maîtrisé et de livrables de qualité.
🧠Rappels
⚙️ Rappel des commandes de base
git init # Initialise un dépôt Git
git clone URL # Clone un dépôt distant
git status # Vérifie l'état des fichiers
git add fichier # Ajoute un fichier à l'index (staging area)
git commit -m "msg" # Crée un commit
git log # Affiche l'historique des commits
Les plus pratiques :
git commit --amend --no-edit # fix last commit
git checkout -b release/x # new branch and chechout in
git log --graph --decorate --oneline # history graph
git diff <SHA-1>^ <SHA-1> # vu du commit en version patch
git cherry-pick <SHA-1> # copy commit
Il est possible de créer des alias dans le fichier ~/.gitconfig, par exemple :
co=checkout
can=commit --amend --no-edit
lk=log --graph --decorate --oneline
diffp=!f() { git diff "$1^" "$1"; }; f
cp=cherry-pick
🔄 Rappel sur le cycle de vie d’un fichier
| From | To | Commande |
|---|---|---|
| Working Directory | Staging Area | git add . ou git add fichier |
| Staging Area | Local Repository | git commit |
| Local Repository | Remote Repository | git push |
| État | Description |
|---|---|
| Untracked | Fichier non suivi par Git |
| Staged | Fichier prêt à être commit |
| Committed | Fichier sauvegardé dans l’historique |
🗂️Rappel sur les repository
🔍 Vérifier les remotes existants
git remote -v
→ Affiche la liste des dépôts distants (nom + URL) avec en général un dépot origin fetch et push
➕ Ajouter un remote
git remote add nom url
Exemple :
git remote add superuser https://github.com/user/repo.git
Les commits dans Git
✅ Définition
Un commit = une modification logique unique.
Chaque commit possède un SHA-1 unique permettant de l’identifier dans l’historique.
💡 Pour partager un commit avec un collaborateur, on lui communique le SHA-1 et la branche.
git checkout <SHA-1> est une commande correct
⚡ Lisibilité de l’historique
Si chaque commit a un but clair et compréhensible, la lisibilité de l’historique est facilitée.
⚠️ Principe d’atomicité
Le principe d’atomicité repose sur l’idée qu’une action ou un commit doit être indivisible et cohérente :
🔹 Un commit = une seule modification logique complète.
💡 En pratique
Chaque commit doit représenter une étape fonctionnelle autonome : il doit pouvoir être appliqué ou annulé sans casser le projet.
un terraform plan ne doit pas remonter pas d’erreur.
Si une modification touche plusieurs aspects indépendants (ex. corriger un bug + reformater du code), il vaut mieux faire plusieurs commits séparés :
* 7f44b46 feat: ajout du formulaire de contact
* 5be4bae fix: corrige le bug d’affichage sur mobile
* ad56a90 doc: met à jour le README
* 43007ad refactor: simplifie la fonction d’authentification
* 971d4a7 chore: changement d'Url d'inscription
Afin d’Organisation des commits par branche :
git lk release/20251110
* b6e8041 (HEAD -> release/20251110, origin/release/20251110) feat: ajout du formulaire de contact
* e3a437c refactor: simplifie la fonction d’authentification
* d81b76f doc: met à jour le README
* 81ddefd (origin/feature/20251110) chore: changement d'Url d'inscription
* 1243ddd (origin/hotfix/20251110, origin/master) fix: corrige le bug d’affichage sur mobile
⚙️ Importance de l’atomicité
-
Intégration continue plus fiable → un commit doit toujours laisser le projet dans un état stable, (tests qui passent, code compilable, etc.).
-
Le retravail de l’historique est facilité → permet de s’adapter plus facilement à la roadmap des releases en fonction des aléas du projet.
- Selon les besoins, on peut supprimer les commits non retenus pour la mise en production ou regrouper les fonctionnalités livrées dans une même release.
- C’est sur ce point que Git apporte une réelle valeur ajoutée au travail du développeur.
⚠️ La rigueur ne doit absolument pas être compromise, sinon la gestion de l’historique sera sapé et les équipes vont perdre confiance dans la qualité du livrable.
Ce travail en amont vous fera gagner du temps sur le long terme.
🌿Les branches dans Git
📌 Types de branches
| Branche | Rôle |
|---|---|
| main ou master | Branche stable (production) |
| develop | Branche principale de développement |
| feature/xxx | Nouvelle fonctionnalité |
| hotfix/xxx | Correction urgente |
| release/xxx | Prochaine livraison |
💡 Création et navigation
git branch # Liste les branches
git checkout -b feature/ajout-login # Crée et bascule sur une nouvelle branche
git checkout main # Retourne sur la branche principale
🔀 Merge vs Rebase
Prenons 2 branches X et Y.
