Utilisation de Git
Partie 1 : Les Bases
1. Configuration Initiale
Avant toute chose, dites à Git qui vous êtes. Ces informations seront associées à chaque commit (instantané) que vous créez.
# Configure votre nom d'utilisateur
git config --global user.name "Votre Nom"
# Configure votre adresse e-mail
git config --global user.email "votre.email@example.com"
2. Démarrer un projet
On à deux façons de commencer à travailler avec Git.
Option A : Cloner un dépôt existant C'est le cas le plus courant. On récupère un projet qui existe déjà sur une plateforme comme GitHub, GitLab, ou Bitbucket.
# Clone (télécharge) le projet dans un dossier du même nom
git clone https://github.com/nom-utilisateur/nom-du-projet.git
# Naviguez dans le dossier nouvellement créé
cd nom-du-projet
Option B : Initialiser un nouveau dépôt Si on démarre un projet de zéro sur votre machine.
# Créez un dossier pour votre projet
mkdir mon-super-projet
cd mon-super-projet
# Initialise un dépôt Git vide dans ce dossier
git init
3. Cycle de Travail
Une fois dans votre projet, le cycle est toujours le même : Modifier -> Ajouter -> Valider -> Pousser.
Étape 1 : Voir l'état du projet (git status)
C'est la commande la plus importante. Elle vous dit quels fichiers ont été modifiés, lesquels sont nouveaux, et sur quelle branche vous êtes.
Untracked files: Fichiers que Git ne suit pas encore.
* Changes not staged for commit: Fichiers modifiés que vous n'avez pas encore "sélectionnés" pour le prochain enregistrement.
* Changes to be committed: Fichiers que vous avez sélectionnés (via git add).
Étape 2 : Ajouter des fichiers à l'index (git add)
L'index (ou "staging area") est une zone de préparation. On y place les modifications qu'on souhaite inclure dans le prochain commit.
# Ajoute un fichier spécifique
git add nom_du_fichier.html
# Ajoute tous les fichiers modifiés et les nouveaux fichiers du dossier courant
git add .
Étape 3 : Valider les changements (git commit)
Un commit est un instantané de votre projet à un moment T, accompagné d'un message descriptif. C'est un point de sauvegarde dans votre historique local.
# Ouvre un éditeur de texte pour écrire un message de commit détaillé
git commit
# Ou, pour un message court et direct :
git commit -m "Ajout de la page de contact avec formulaire"
Bonne pratique : Les messages de commit doivent être clairs, concis et au présent de l'impératif (ex: "Ajoute la fonctionnalité X" plutôt que "J'ai ajouté la fonctionnalité X").
Étape 4 : Envoyer les changements vers le dépôt distant (git push)
Votre commit n'existe que sur votre machine. Pour le partager avec vos collaborateurs, vous devez le "pousser" vers le serveur distant (celui d'où vous avez cloné).
git push --set-upstream origin nom-de-la-branche.
Étape 5 : Récupérer les changements du dépôt distant (git pull)
Si vos collaborateurs ont poussé des changements, vous devez les récupérer pour être à jour.
Réflexe : Toujours faire un
git pullavant de commencer à travailler pour éviter les conflits.
Partie 2 : Les Branches
Une branche est comme une ligne de développement parallèle. Vous pouvez créer une branche pour travailler sur une nouvelle fonctionnalité sans affecter la branche principale (main ou master).
1. Lister et Créer des Branches
# Lister toutes les branches locales. L'* indique la branche active.
git branch
# Lister toutes les branches (locales et distantes)
git branch -a
# Créer une nouvelle branche (mais sans basculer dessus)
git branch nom-de-la-nouvelle-fonctionnalite
# Créer une nouvelle branche ET basculer dessus directement (méthode moderne)
git switch -c nom-de-la-nouvelle-fonctionnalite
# (Méthode ancienne mais très courante)
git checkout -b nom-de-la-nouvelle-fonctionnalite
2. Changer de Branche
# Basculer vers une branche existante (méthode moderne)
git switch nom-de-la-branche
# (Méthode ancienne)
git checkout nom-de-la-branche
Warning
checkout peut être dangereux si on va on se déplace hors d'un main ou d'une autre branche
3. Fusionner les Branches (git merge)
Une fois votre fonctionnalité terminée sur sa branche, vous voudrez la rapatrier dans la branche principale (main).
# 1. Revenez sur la branche qui doit RECEVOIR les changements
git switch main
# 2. Assurez-vous qu'elle est à jour
git pull
# 3. Fusionnez votre branche de fonctionnalité DANS main
git merge nom-de-la-nouvelle-fonctionnalite
4. Supprimer une Branche
Une fois la branche fusionnée, vous pouvez la supprimer pour garder le projet propre.
Partie 3 : Utilisation avancée et Corriger les Erreurs
Les erreurs arrivent. Git est votre filet de sécurité.
1. Consulter l'Historique (git log)
git log vous montre la liste de tous les commits.
# Historique complet
git log
# Historique concis, sur une seule ligne par commit
git log --oneline
# Historique avec une représentation graphique des branches
git log --oneline --graph --decorate --all
2. Modifier le Dernier Commit (git commit --amend)
Vous avez fait une faute de frappe dans votre dernier message de commit ? Ou oublié un fichier ?
# Ajoutez le fichier oublié
git add fichier_oublie.txt
# "Amendez" le commit précédent. Cela n'en crée pas un nouveau, mais modifie le dernier.
git commit --amend
push) sur une branche partagée !
3. Annuler des Modifications Locales
Vous avez modifié un fichier mais vous voulez annuler tous vos changements et revenir à la version du dernier commit.
# Annule les modifications sur un fichier spécifique
# ATTENTION : C'est destructif, les changements sont perdus.
git restore nom_du_fichier.txt
# Annule TOUTES les modifications dans le répertoire de travail
git restore .
4. Revenir en Arrière de Manière Sûre (git revert)
git revert est la méthode la plus sûre pour annuler un commit qui a déjà été partagé. Il ne supprime pas le commit, mais crée un nouveau commit qui fait l'inverse des changements.
# Crée un nouveau commit qui annule les changements du commit spécifié
# (remplacez <hash_du_commit> par l'identifiant trouvé via git log)
git revert <hash_du_commit>
5. Revenir en Arrière de Manière "Brutale" (git reset)
git reset réécrit l'historique. C'est puissant mais dangereux si vous ne savez pas ce que vous faites. À n'utiliser que sur des commits locaux qui n'ont pas été poussés.
# --soft : Annule le dernier commit, mais garde les changements "stagés" (prêts à être commit)
git reset --soft HEAD~1
# --mixed (défaut) : Annule le dernier commit et "déstagise" les changements (ils apparaissent comme modifiés mais non stagés)
git reset HEAD~1
# --hard : DANGER. Annule le dernier commit et EFFACE DÉFINITIVEMENT tous les changements associés.
git reset --hard HEAD~1
HEAD~1 signifie "un commit avant la position actuelle".
Partie 4 : Pour les Sorciers de Git (Concepts Avancés)
1. Le Rebase (git rebase)
Le rebase est une alternative au merge pour intégrer des changements. Au lieu de créer un "commit de fusion", il déplace votre branche pour la faire partir du dernier commit de la branche cible, créant un historique linéaire et propre.
main ou develop) que d'autres personnes utilisent. Cela réécrit l'historique et créera le chaos pour vos collaborateurs.
2. Le Rebase Interactif (git rebase -i)
C'est le couteau suisse de la modification d'historique. Il vous permet de réorganiser, fusionner, modifier ou supprimer des commits avant de les fusionner.
Un éditeur de texte s'ouvre avec une liste de vos commits. Vous pouvez changerpick en :
* reword ou r : pour changer le message du commit.
* squash ou s : pour fusionner le commit avec le précédent.
* fixup ou f : comme squash, mais jette le message du commit.
* drop ou d : pour supprimer complètement le commit.
C'est l'outil parfait pour "nettoyer" votre branche de fonctionnalité avant de la proposer en fusion.
3. Le Stash (git stash)
Imaginez : vous êtes au milieu d'une modification, et on vous demande de corriger un bug urgent sur une autre branche. Vos changements ne sont pas prêts à être commités. Que faire ? Le stash !
Mini-Tuto : Changer de branche sans perdre son travail
Si vous utilisez git switch nom-de-la-branche alors que vous avez des fichiers modifiés, Git peut refuser le changement. Voici comment faire :
1. Mettre de côté (stasher) votre travail :
2. Changer de branche :
3. Revenir sur votre branche initiale :
4. Récupérer votre travail :
Autres options pour le Stash
- Récupérer sans supprimer :
git stash apply(garde le stash dans la liste). - Voir la liste des stashs :
git stash list. - Supprimer un stash :
git stash drop(ougit stash drop stash@{0}pour un spécifique).
Alternative : Le Commit Temporaire
Si vous préférez garder une trace dans l'historique (même temporairement) :
git add .
git commit -m "WIP: Travail en cours"
git switch main
# ... après être revenu sur la branche ...
git reset HEAD~1 # Annule le commit mais garde les fichiers modifiés
Nettoyage : Abandonner vos modifications
Si après avoir fait un git stash ou des modifications, vous décidez de ne plus rien garder pour retrouver un état propre :
# Pour supprimer le stash (si vous avez stashé)
git stash drop
# Pour supprimer les fichiers non traqués et annuler les modifs en cours
git clean -fd
git checkout .
4. Le Cherry-Pick (git cherry-pick)
Permet de prendre un commit spécifique d'une autre branche et de l'appliquer sur votre branche actuelle. Très utile pour récupérer un correctif de bug sans fusionner toute la branche.
5. Le Reflog : Votre Filet de Sécurité Ultime (git reflog)
Vous avez fait un git reset --hard par erreur et pensez avoir tout perdu ? Le reflog est là. Il enregistre TOUT ce que HEAD (votre position actuelle) a fait.
git reset --hard <hash_du_reflog> pour y retourner. Le reflog vous a sauvé la vie.
Avancé
Git diff
Pour visualiser les modifications apportées à l'index (zone de préparation pour le prochain commit) :
Pour visualiser les modifications apportées à repo de la branche sur lesquelle on travaille :
Git ignore
On peut crée un fichier git ignore pour évité de la suivie de version de certain fichier grace au fichier .gitignore
exemple :
# Fichiers de secrets - NE JAMAIS COMMITER
.env
.env.local
.env.productionw
.env.staging
.ssh
# Fichiers de sauvegarde
*.bak
*.backup
*.old
# Ignore "monfichier" dans TOUS les répertoires (racine ET sous-dossiers)
**/monfichier
Résolution de Problème
sauvegarder les identifiants sur l'instance linux :
source : Stack Overflow