Git Contrôle de version
Toutes les commandes Git essentielles pour gérer vos dépôts, branches et collaborer efficacement.
git configConfigure l'identité et les préférences globales de Git. Ces paramètres sont stockés dans ~/.gitconfig et s'appliquent à tous vos dépôts.
git config --global user.name "Votre Nom"
git config --global user.email "vous@exemple.fr"
git config --global core.editor "code --wait"
git config --global init.defaultBranch main
git config --list
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --decorate --all"
| Niveau | Fichier | Description |
|---|---|---|
--system | /etc/gitconfig | Pour tous les utilisateurs du système |
--global | ~/.gitconfig | Pour l'utilisateur courant (le plus courant) |
--local | .git/config | Pour le dépôt courant uniquement (prioritaire) |
git initInitialise un nouveau dépôt Git. Crée un dossier .git caché contenant toute l'histoire du projet.
git init # Initialise un dépôt dans le dossier courant
git init mon-projet # Crée un dossier et initialise
git init --bare projet.git # Dépôt nu (serveur)
git statusAffiche l'état du répertoire de travail et de la zone de staging. Indique les fichiers modifiés, ajoutés ou non suivis.
git status # État du répertoire de travail
git status -s # Format court
git logConsulte l'historique des commits avec de nombreuses options de filtrage et d'affichage.
git log # Historique complet
git log --oneline # Une ligne par commit
git log --oneline --graph --all # Arbre des branches
git log -n 5 # 5 derniers commits
git log --author="Alice" # Commits d'un auteur
git log --since="2024-01-01" # Depuis une date
git log -- fichier.js # Commits touchant un fichier
git show abc1234 # Détails d'un commit
git diffAffiche les différences entre l'espace de travail, la zone de staging et les commits.
git diff # Changements non stagés
git diff --staged # Changements stagés
git diff main..feature # Diff entre branches
git blame fichier.js # Qui a modifié chaque ligne
git addAjoute des modifications à la zone de staging (index) en préparation du prochain commit.
git add fichier.js # Stager un fichier
git add . # Stager tous les changements
git add -p # Stager interactivement (par morceaux)
git add *.html # Pattern glob
git restore --staged fichier.js # Unstager (annuler git add)
git restore fichier.js # Annuler modifications (dangereux)
git commitEnregistre les changements stagés dans l'historique du dépôt avec un message descriptif.
git commit -m "feat: ajouter authentification"
git commit -am "fix: corriger bug login" # add + commit en une fois
git commit --amend -m "nouveau message" # modifier le dernier commit
git commit --amend --no-edit # ajouter à dernier commit sans changer message
Standard pour des messages de commit lisibles et utiles pour générer des changelogs automatiques.
| Préfixe | Description |
|---|---|
feat: | Nouvelle fonctionnalité |
fix: | Correction de bug |
docs: | Documentation uniquement |
style: | Formatage (pas de changement logique) |
refactor: | Refactorisation du code |
test: | Ajout ou modification de tests |
chore: | Tâches de maintenance (deps, build…) |
git branchLes branches permettent de travailler sur des fonctionnalités en isolation sans affecter le code principal.
git branch # Lister les branches locales
git branch -a # Toutes les branches (locales + distantes)
git branch ma-feature # Créer une branche
git checkout ma-feature # Basculer sur une branche
git checkout -b ma-feature # Créer ET basculer
git switch ma-feature # Basculer (commande moderne)
git switch -c ma-feature # Créer et basculer (moderne)
git branch -d ma-feature # Supprimer (si fusionnée)
git branch -D ma-feature # Supprimer de force
git branch -m ancien nouveau # Renommer
git branch -m main # Renommer la branche courante en main
git mergeIntègre les changements d'une branche dans une autre en créant un commit de fusion (merge commit).
# Merge : crée un commit de fusion
git checkout main
git merge ma-feature # Fusion avec commit de merge
git merge --no-ff ma-feature # Forcer un commit de merge
git merge --squash ma-feature # Squash tous les commits en un seul
git rebaseDéplace ou rejoue des commits sur une nouvelle base, produisant un historique linéaire plus propre.
# Rebase : rejoue les commits sur une autre base
git checkout ma-feature
git rebase main # Rejoue ma-feature sur main
git rebase -i HEAD~3 # Rebase interactif (3 derniers commits)
# Dans le rebase interactif : pick, squash(s), fixup(f), reword(r), drop(d)
Lorsque deux branches modifient les mêmes lignes, Git crée un conflit à résoudre manuellement.
git status # Voir les fichiers en conflit
# Éditer les fichiers conflictuels, puis :
git add fichier-resolu.js
git merge --continue
# OU
git merge --abort # Annuler la fusion
git rebase --abort
git remoteLes remotes sont des références vers des dépôts hébergés (GitHub, GitLab…). origin est le nom conventionnel du remote principal.
git remote -v # Lister les remotes
git remote add origin https://github.com/user/repo.git
git remote remove origin
git remote rename origin upstream
git remote set-url origin https://nouveau-url.git
git pushEnvoie les commits locaux vers le dépôt distant. L'option -u définit la branche de suivi amont.
git push origin main # Pousser vers remote
git push -u origin ma-feature # Pousser et définir upstream
git push --all # Pousser toutes les branches
git push origin :ma-feature # Supprimer branche distante
git push origin --delete ma-feature
git push --tags # Pousser les tags
git push --force-with-lease # Push force sécurisé (préférer à --force)
git cloneCopie un dépôt distant en local avec tout son historique et configure automatiquement le remote origin.
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git mon-dossier
git clone --depth=1 url # Clone superficiel (sans historique complet)
git clone --branch develop url # Cloner une branche spécifique
git fetch / git pullgit fetch récupère sans fusionner (sûr). git pull combine fetch et merge en une seule commande.
git fetch origin # Récupère sans fusionner
git fetch --all # Récupère toutes les branches
git pull origin main # fetch + merge
git pull --rebase origin main # fetch + rebase (historique plus propre)
git stashSauvegarde temporairement les modifications en cours sans créer de commit, pour pouvoir changer de branche proprement.
git stash # Mise de côté des modifications
git stash push -m "message" # Avec message descriptif
git stash -u # Inclure les fichiers non suivis (untracked)
git stash -a # Inclure aussi les fichiers ignorés (.gitignore)
git stash -p # Mode interactif : choisir les hunks à mettre de côté
git stash list # Lister les stashs
git stash show # Afficher le résumé du dernier stash
git stash show -p # Afficher le diff complet du dernier stash
git stash show stash@{1} # Afficher le résumé d'un stash spécifique
git stash pop # Appliquer le dernier stash et le supprimer
git stash apply stash@{2} # Appliquer un stash spécifique
git stash drop stash@{0} # Supprimer un stash
git stash clear # Supprimer tous les stashs
git stash branch ma-branche # Créer une branche depuis un stash
git resetRéécrit l'historique en déplaçant le pointeur HEAD. --hard est destructif et supprime définitivement les modifications.
# Annuler des commits (garder les modifications)
git reset HEAD~1 # Annuler 1 commit, garder les modifs stagées
git reset --soft HEAD~1 # Garder les modifs stagées
git reset --mixed HEAD~1 # Garder les modifs non stagées (défaut)
git reset --hard HEAD~1 # TOUT supprimer (dangereux, perte de données)
git revertgit revert crée un nouveau commit qui annule les changements, sans réécrire l'historique. Sûr pour les branches partagées.
# Revert : crée un commit inverse (sûr pour l'historique partagé)
git revert abc1234 # Annule un commit en créant un nouveau
git revert HEAD # Annule le dernier commit
git cherry-pickApplique les changements d'un ou plusieurs commits spécifiques sur la branche courante, sans fusionner toute la branche.
# Cherry-pick : appliquer un commit spécifique
git cherry-pick abc1234 # Applique ce commit sur la branche courante
git cherry-pick abc1234..def5678 # Plage de commits
git tagLes tags marquent des points importants dans l'historique (ex. releases). Les tags annotés sont recommandés car ils contiennent des métadonnées.
git tag # Lister les tags
git tag v1.0.0 # Tag léger
git tag -a v1.0.0 -m "Version 1.0.0" # Tag annoté (recommandé)
git tag -a v1.0.0 abc1234 -m "..." # Tag sur un commit spécifique
git show v1.0.0 # Afficher les infos du tag
git push origin v1.0.0 # Pousser un tag
git push origin --tags # Pousser tous les tags
git tag -d v1.0.0 # Supprimer localement
git push origin --delete v1.0.0 # Supprimer sur le remote
git checkout v1.0.0 # Se placer sur un tag (detached HEAD)
.gitignoreListe les fichiers et dossiers que Git doit ignorer. Placé à la racine du projet. Les patterns sont évalués depuis la racine du dépôt.
# Dépendances
node_modules/
vendor/
# Build
dist/
build/
.next/
# Environnement
.env
.env.local
.env.*.local
# Éditeur
.vscode/
.idea/
*.swp
*~
# OS
.DS_Store
Thumbs.db
# Logs
*.log
npm-debug.log*
# Cache
.cache/
.parcel-cache/
Si un fichier est déjà suivi par Git et que vous voulez l'ignorer, il faut d'abord le retirer du cache sans le supprimer du disque.
git rm --cached fichier.js # Retirer un fichier déjà suivi
git rm --cached -r node_modules/ # Retirer un dossier entier
# Ensuite ajouter le fichier/dossier dans .gitignore et commiter
GitHub Flow est un workflow simple et efficace basé sur des branches de fonctionnalités courtes et des déploiements fréquents.
# === ÉTAPE 1 : Se placer sur main et être à jour ===
git checkout main
git pull origin main
# === ÉTAPE 2 : Créer une branche pour la fonctionnalité ===
git switch -c feature/ajout-authentification
# === ÉTAPE 3 : Travailler et commiter régulièrement ===
git add .
git commit -m "feat: ajouter formulaire de connexion"
git add src/auth/
git commit -m "feat: implémenter vérification JWT"
git add tests/
git commit -m "test: ajouter tests d'authentification"
# === ÉTAPE 4 : Pousser la branche vers le remote ===
git push -u origin feature/ajout-authentification
# === ÉTAPE 5 : Ouvrir une Pull Request sur GitHub ===
# → Aller sur GitHub et créer la PR depuis l'interface
# → Assigner des reviewers, lier des issues
# === ÉTAPE 6 : Intégrer les retours de la review ===
git add src/auth/middleware.js
git commit -m "fix: corriger validation token expiré"
git push
# === ÉTAPE 7 : Mise à jour depuis main (si nécessaire) ===
git fetch origin
git rebase origin/main # Historique propre et linéaire
git push --force-with-lease # Push forcé sécurisé après rebase
# === ÉTAPE 8 : Merge après approbation (sur GitHub ou en CLI) ===
git checkout main
git merge --no-ff feature/ajout-authentification
git push origin main
# === ÉTAPE 9 : Nettoyer la branche ===
git branch -d feature/ajout-authentification
git push origin --delete feature/ajout-authentification
| Pratique | Description |
|---|---|
main toujours stable | Ne jamais pousser directement sur main sans review |
| Branches courtes | Fusionner souvent pour éviter les conflits importants |
| Commits atomiques | Un commit = une seule modification logique |
| Messages clairs | Utiliser Conventional Commits pour l'automatisation |
| Pull Requests | Toujours faire relire le code avant de fusionner |
--force-with-lease | Préférer à --force pour éviter d'écraser le travail des autres |
Aucun résultat pour votre recherche.