# Documentation Git

Introduction

Git est un système de contrôle de version distribué qui permet de suivre les modifications de fichiers et de coordonner le travail entre plusieurs personnes. Cette documentation présente les commandes Git les plus courantes.

Installation et Configuration

Installation

Pour installer Git :

sudo apt-get install git ''# Sur Debian/Ubuntu''
brew install git ''# Sur macOS avec Homebrew''

Configuration initiale

Configuration de base après installation :

git config --global user.name "Votre Nom"
git config --global user.email "votre.email@exemple.com"
git config --global core.editor "code" ''# Pour utiliser VS Code comme éditeur''

Création et Clonage de Dépôts

Initialiser un nouveau dépôt

Pour créer un nouveau dépôt Git local :

git init

Cloner un dépôt existant

Pour copier un dépôt existant :

git clone https://github.com/utilisateur/depot.git
git clone https://github.com/utilisateur/depot.git mon_dossier ''# Cloner dans un dossier spécifique''

Gestion des Modifications

Vérifier l'état du dépôt

Pour voir les fichiers modifiés et l'état actuel :

git status
git status -s ''# Format court''

Ajouter des fichiers

Pour ajouter des fichiers à l'index (staging area) :

git add fichier.txt ''# Ajouter un fichier spécifique''
git add dossier/ ''# Ajouter tous les fichiers d'un dossier''
git add *.js ''# Ajouter tous les fichiers .js''
git add . ''# Ajouter tous les fichiers modifiés''
git add -p ''# Ajouter des parties spécifiques des fichiers (mode interactif)''

Visualiser les modifications

Pour voir les modifications avant de les committer :

git diff ''# Différences entre les fichiers modifiés et l'index''
git diff --staged ''# Différences entre l'index et le dernier commit''
git diff HEAD ''# Différences entre les fichiers modifiés et le dernier commit''
git diff commit1 commit2 ''# Différences entre deux commits''

Créer un commit

Pour sauvegarder les modifications :

git commit -m "Description du commit"
git commit -a -m "Description" ''# Ajoute automatiquement les fichiers modifiés (pas les nouveaux)''
git commit --amend ''# Modifier le dernier commit''

Historique et Navigation

Consulter l'historique

Pour voir l'historique des commits :

git log
git log --oneline ''# Format compact, une ligne par commit''
git log --graph --oneline --all ''# Affichage graphique de l'historique''
git log -p ''# Affiche également les différences de chaque commit''
git log -n 5 ''# Affiche les 5 derniers commits''
git log --author="nom" ''# Filtre par auteur''

Voir les détails d'un commit

Pour examiner un commit spécifique :

git show abcd1234 ''# Montre les détails d'un commit spécifique''
git show abcd1234:fichier.txt ''# Montre le contenu d'un fichier dans un commit spécifique''

Consulter l'historique des actions

Pour voir l'historique complet des actions Git :

git reflog ''# Utile pour récupérer des commits perdus''

Branches et Fusion

Gestion des branches

Pour créer et gérer des branches :

git branch ''# Liste les branches''
git branch nom-branche ''# Crée une nouvelle branche''
git branch -d nom-branche ''# Supprime une branche''
git branch -m ancien-nom nouveau-nom ''# Renomme une branche''

Navigation entre branches

Pour changer de branche :

git checkout nom-branche ''# Bascule vers une branche existante''
git checkout -b nouvelle-branche ''# Crée et bascule vers une nouvelle branche''
git checkout - ''# Retourne à la branche précédente''

Fusion de branches

Pour fusionner une branche dans la branche courante :

git merge nom-branche ''# Fusionne nom-branche dans la branche courante''
git merge --no-ff nom-branche ''# Fusion avec création d'un commit de fusion explicite''
git merge --abort ''# Annule une fusion en cours (en cas de conflits)''

Rebasing

Pour réorganiser l'historique des commits :

git rebase master ''# Réapplique les commits de la branche courante sur master''
git rebase -i HEAD~3 ''# Rebase interactif des 3 derniers commits''

Collaboration et Dépôts Distants

Gestion des dépôts distants

Pour travailler avec des dépôts distants :

git remote ''# Liste les dépôts distants''
git remote -v ''# Liste détaillée des dépôts distants''
git remote add origin https://github.com/utilisateur/depot.git ''# Ajoute un dépôt distant''
git remote remove origin ''# Supprime un dépôt distant''

Récupérer et envoyer des modifications

Pour synchroniser avec un dépôt distant :

git fetch origin ''# Récupère les modifications sans les fusionner''
git pull ''# Récupère et fusionne les modifications (fetch + merge)''
git pull --rebase ''# Récupère et réapplique les commits locaux (fetch + rebase)''
git push origin branche ''# Envoie les commits locaux vers le dépôt distant''
git push -u origin branche ''# Envoie et configure la branche distante comme upstream''

Revenir en Arrière

Annuler des modifications

Pour annuler des modifications :

git checkout -- fichier.txt ''# Annule les modifications d'un fichier non indexé''
git restore fichier.txt ''# Équivalent moderne de git checkout -- fichier.txt''
git reset HEAD fichier.txt ''# Retire un fichier de l'index''
git restore --staged fichier.txt ''# Équivalent moderne de git reset HEAD fichier.txt''

Annuler des commits

Pour annuler des commits :

git reset --soft HEAD~1 ''# Annule le dernier commit mais conserve les modifications''
git reset --mixed HEAD~1 ''# Annule le dernier commit et l'indexation des fichiers''
git reset --hard HEAD~1 ''# Annule le dernier commit et supprime les modifications''
git revert HEAD ''# Crée un nouveau commit qui annule le dernier commit''
git revert abcd1234 ''# Crée un nouveau commit qui annule le commit spécifié''

Sauvegarde Temporaire

Utiliser le stash

Pour sauvegarder temporairement des modifications :

git stash ''# Sauvegarde les modifications en cours''
git stash save "message" ''# Sauvegarde avec un message descriptif''
git stash list ''# Liste les stashes''
git stash apply ''# Applique le dernier stash sans le supprimer''
git stash pop ''# Applique le dernier stash et le supprime''
git stash drop stash@{0} ''# Supprime un stash spécifique''
git stash clear ''# Supprime tous les stashes''

Tags et Versions

Gestion des tags

Pour marquer des points importants dans l'historique :

git tag ''# Liste les tags''
git tag v1.0.0 ''# Crée un tag léger''
git tag -a v1.0.0 -m "Version 1.0.0" ''# Crée un tag annoté''
git push origin v1.0.0 ''# Envoie un tag vers le dépôt distant''
git push origin --tags ''# Envoie tous les tags''

Situations Particulières

Récupération après erreur

Pour récupérer après des erreurs :

git reflog ''# Affiche l'historique des actions Git''
git fsck --full ''# Vérifie l'intégrité du dépôt''
git checkout abcd1234 -- fichier.txt ''# Récupère un fichier à partir d'un commit spécifique''

Résolution de conflits

Pour gérer les conflits de fusion :

git status ''# Identifie les fichiers en conflit''
git mergetool ''# Lance un outil visuel de résolution de conflits''
git add fichier.txt ''# Marque le fichier comme résolu après modification manuelle''
git commit ''# Termine la fusion après résolution des conflits''

Bonnes Pratiques

Workflow courant

Exemple de workflow Git typique pour un site web :

git pull ''# Toujours commencer par récupérer les modifications''
git checkout -b nouvelle-fonction ''# Créer une branche pour la nouvelle fonction''
''# Faire les modifications nécessaires''
git add . ''# Ajouter les modifications''
git commit -m "Ajout de la fonction X" ''# Créer un commit''
git checkout main ''# Revenir à la branche principale''
git pull ''# Mettre à jour la branche principale''
git merge nouvelle-fonction ''# Fusionner la fonction''
git push ''# Pousser les modifications''

Messages de commit

Exemples de bons messages de commit :

git commit -m "Fix: correction du bug d'authentification"
git commit -m "Feature: ajout du formulaire de contact"
git commit -m "Docs: mise à jour de la documentation d'installation"
git commit -m "Style: formatage du code selon les normes du projet"