Commandes quotidiennes
Dans ce chapitre, nous allons voir les commandes Git que vous utiliserez régulièrement dans votre workflow de développement.
Gestion des branches
Les branches permettent de travailler sur plusieurs fonctionnalités en parallèle sans affecter le code principal.
Imaginez que vous développez une nouvelle fonctionnalité qui prendra 3 jours. Pendant ce temps, un bug critique est découvert en production. Grâce aux branches, vous pouvez :
- Mettre de côté votre feature
- Corriger le bug sur la branche
main - Revenir à votre feature
Créer une branche
# Créer une branche
git branch nom-de-la-branche
# Créer ET basculer sur une branche (recommandé)
git checkout -b nom-de-la-branche
Ou avec la syntaxe moderne :
git switch -c nom-de-la-branche
Convention de nommage :
git checkout -b feat/nouvelle-fonctionnalite
git checkout -b fix/bug-login
git checkout -b refactor/clean-code
git checkout -b docs/update-readme
Lister les branches
# Branches locales
git branch
# Toutes les branches (locales + distantes)
git branch -a
# Branches avec dernier commit
git branch -v
Résultat :
* feat/nouvelle-feature
main
fix/bug-login
L'astérisque * indique la branche active.
Switcher entre les branches
git checkout nom-de-la-branche
Ou avec la syntaxe moderne :
git switch nom-de-la-branche
git stash (vu plus bas) pour les mettre de côté temporairement.Supprimer une branche
# Supprimer une branche locale (seulement si déjà mergée)
git branch-Dnom-de-la-branche
# Forcer la suppression (si pas mergée)
git branch -D nom-de-la-branche
# Supprimer une branche distante sur GitHub
git push origin --delete nom-de-la-branche
Renommer une branche
# Renommer la branche actuelle
git branch -m nouveau-nom
# Renommer une autre branche
git branch -m ancien-nom nouveau-nom
Visualiser l'historique
Commandes git log
# Historique complet (appuyez sur 'q' pour quitter)
git log
# Historique condensé (recommandé pour un aperçu rapide)
git log --oneline
# Historique graphique (voir les branches et merges)
git log --graph --oneline --all
# Rechercher dans l'historique
git log --grep="fix"
# Historique d'un fichier spécifique
git log --follow src/app.js
# Derniers N commits
git log -n 5
Exemple de résultat git log --oneline :
e4f5g6h feat: add user authentication
a1b2c3d fix: resolve login timeout
b2c3d4e docs: update API documentation
Voir les différences
# Différences non indexées (working directory vs staging)
git diff
# Différences indexées (staging vs dernier commit)
git diff --staged
# Différences entre deux commits
git diff a1b2c3d e4f5g6h
# Différences entre deux branches
git diff main..feat/nouvelle-feature
# Différences pour un fichier spécifique
git diff src/app.js
Voir le détail d'un commit
git show a1b2c3d
Affiche les modifications apportées par ce commit spécifique.
Annuler et corriger des modifications
L'une des forces de Git est de pouvoir annuler ou corriger des erreurs. Voici comment.
Annuler les modifications d'un fichier
Vous avez modifié un fichier mais voulez abandonner ces changements :
# Syntaxe moderne (Git 2.23+)
git restore fichier.txt
# Ancienne syntaxe
git checkout -- fichier.txt
Résultat : Le fichier revient à l'état du dernier commit.
Retirer un fichier de la staging area
Vous avez fait git add par erreur et voulez retirer un fichier de la staging area :
# Syntaxe moderne (Git 2.23+)
git restore --staged fichier.txt
# Ancienne syntaxe
git reset HEAD fichier.txt
Résultat : Le fichier reste modifié mais n'est plus staged.
Modifier le dernier commit
Vous avez oublié d'ajouter un fichier ou vous voulez modifier le message du dernier commit :
# Modifier le message du dernier commit
git commit --amend -m "nouveau message"
# Ajouter un fichier oublié au dernier commit
git add fichier-oublie.txt
git commit --amend --no-edit
--amend que si le
commit n'a pas encore été pushé ! Sinon, vous réécrirez l'historique et créerez des problèmes pour vos
collaborateurs.Annuler le dernier commit
Option 1 : Garder les modifications (recommandé)
git reset --soft HEAD~1
Résultat : Le commit est annulé, mais vos modifications restent dans la staging area.
Option 2 : Retirer de staging
git reset HEAD~1
Résultat : Le commit est annulé, vos modifications restent dans le working directory mais ne sont plus staged.
Option 3 : Tout supprimer (DANGEREUX )
git reset --hard HEAD~1
Résultat : Le commit ET les modifications sont supprimés définitivement.
Annuler un commit sans réécrire l'historique
Si le commit a déjà été pushé, utilisez revert au lieu de reset :
git revert a1b2c3d
Résultat : Crée un nouveau commit qui annule les changements du commit spécifié. L'historique est préservé.
Remiser son travail avec stash
Le stash (remise) permet de mettre de côté des modifications en cours sans les commiter.
Cas d'usage typique
Vous travaillez sur une feature, mais vous devez immédiatement corriger un bug sur main :
- Votre code n'est pas prêt à être commité
- Vous ne pouvez pas changer de branche avec des modifications en cours
- Solution : Utilisez
git stash!
Sauvegarder les modifications
# Remiser toutes les modifications
git stash
# Remiser avec un message descriptif (recommandé)
git stash save "WIP: working on feature X"
# Remiser en incluant les fichiers non suivis
git stash -u
Résultat : Votre working directory est propre, comme si vous n'aviez rien modifié.
Lister les stashes
git stash list
Résultat :
stash@{0}: WIP on feat/login: a1b2c3d Add login form
stash@{1}: WIP on main: e4f5g6h Update README
Récupérer un stash
# Appliquer le dernier stash ET le supprimer (le plus courant)
git stash pop
# Appliquer un stash spécifique
git stash pop stash@{1}
# Appliquer sans supprimer
git stash apply
Supprimer un stash
# Supprimer le dernier stash
git stash drop
# Supprimer un stash spécifique
git stash drop stash@{1}
# Supprimer TOUS les stashes
git stash clear
Workflow avec stash
# 1. Vous travaillez sur une feature
git checkout -b feat/nouvelle-feature
# ... modifications en cours ...
# 2. Urgence : il faut corriger un bug !
git stash save "WIP: nouvelle feature"
# 3. Correction du bug
git checkout main
git pull
git checkout -b fix/bug-urgent
# ... correction ...
git add .
git commit -m "fix: resolve urgent bug"
git push
# 4. Retour à votre feature
git checkout feat/nouvelle-feature
git stash pop
# 5. Continuer à travailler
Synchronisation avec Origin
Récupérer les changements
# Fetch : récupère les changements SANS les fusionner
git fetch origin
# Pull : récupère ET fusionne les changements
git pull
# Pull avec rebase (historique plus propre)
git pull --rebase
Différence fetch vs pull :
- fetch : Télécharge les changements mais ne modifie pas votre code
- pull : Télécharge ET fusionne les changements dans votre branche
Envoyer les changements
# Push vers la branche actuelle
git push
# Push vers une branche spécifique
git push origin nom-de-la-branche
# Push avec suivi de la branche distante (première fois)
git push -u origin nom-de-la-branche
# Push forcé (DANGEREUX :icon{name="i-heroicons-exclamation-triangle" class="text-orange-500"} - à éviter sur branches partagées)
git push --force
# Force with lease (plus sûr, vérifie avant d'écraser)
git push --force-with-lease
Règle d'or : Ne forcez JAMAIS un push sur une branche partagée (
main,develop) sauf si vous savez exactement ce que vous faites !
Gestion des fichiers
Supprimer un fichier
# Supprimer et commiter en une fois
git rm fichier.txt
git commit -m "chore: remove unused file"
# Garder le fichier localement mais le retirer de Git
git rm --cached fichier.txt
git commit -m "chore: untrack sensitive file"
Après git rm --cached, ajoutez le fichier au .gitignore pour éviter de le re-commiter.
Renommer un fichier
git mv ancien-nom.txt nouveau-nom.txt
git commit -m "chore: rename file"
Git détecte automatiquement que c'est un renommage, pas une suppression + création.
Autres commandes utiles
Voir qui a modifié une ligne
git blame fichier.txt
Affiche pour chaque ligne : qui l'a modifiée, quand, et dans quel commit.
Rechercher dans l'historique
# Rechercher un mot dans les messages de commit
git log --grep="login"
# Rechercher un mot dans le code
git log -S "fonction_importante"
Nettoyer les branches obsolètes
# Voir les branches déjà mergées dans main
git branch --merged main
# Supprimer toutes les branches locales déjà mergées
git branch --merged main | grep -v "main" | xargs git branch -d
Résumé des commandes
| Commande | Description |
|---|---|
git branch | Liste les branches |
git checkout -b nom | Crée et bascule sur une branche |
git switch nom | Bascule sur une branche (moderne) |
git branch-Dnom | Supprime une branche |
git log --oneline | Historique condensé |
git diff | Voir les modifications |
git restore fichier | Annuler les modifications |
git restore --staged fichier | Retirer de staging |
git reset --soft HEAD~1 | Annuler le dernier commit |
git revert commit | Annuler un commit (nouveau commit) |
git stash | Remiser les modifications |
git stash pop | Récupérer les modifications remisées |
git pull --rebase | Récupérer avec rebase |
git push -u origin nom | Pousser et définir le tracking |