Commandes Git : aide-mémoire avec des exemples pour le quotidien
Les principales commandes Git sont git init et git clone pour créer un dépôt, git status, git add et git commit pour enregistrer les modifications, git branch, git switch et git merge pour les branches, git push, git fetch et git pull pour se synchroniser avec le serveur, ainsi que git restore, git reset et git revert pour annuler des changements.
Voici un aide-mémoire Git pour le travail quotidien : les commandes sont regroupées par tâche, chacune avec un exemple et une courte explication. Gardez-le ouvert à côté du terminal : presque tout ce qu'un développeur fait avec Git dans une journée tient dans les 20 à 30 commandes de ces tableaux.
Pour bien comprendre les commandes, gardez en tête trois zones : le répertoire de travail (les fichiers sur le disque), l'index ou staging area (ce qui entrera dans le prochain commit) et le dépôt (l'historique des commits dans le dossier .git). La plupart des commandes Git déplacent des modifications entre ces trois zones ou entre le dépôt local et le dépôt distant.
Configurer Git
Ces commandes s'exécutent une fois après l'installation. L'option --global écrit les réglages dans ~/.gitconfig et s'applique à tous les dépôts de l'utilisateur ; sans elle, uniquement au dépôt courant.
| Commande | Ce qu'elle fait |
|---|---|
git config --global user.name "Marie Dupont" | Nom de l'auteur des commits |
git config --global user.email "marie@example.com" | E-mail de l'auteur des commits |
git config --global init.defaultBranch main | Nom de la branche par défaut des nouveaux dépôts |
git config --global core.editor "code --wait" | Éditeur des messages de commit (ici VS Code) |
git config --global pull.rebase false | Comportement par défaut de git pull : fusion |
git config --global core.autocrlf input | Conversion de CRLF en LF au commit (macOS/Linux ; sous Windows, généralement true) |
git config --list --show-origin | Afficher tous les réglages et le fichier d'où vient chacun |
git config --global alias.st status | Alias : git st au lieu de git status |
git --version | Version de Git installée |
git help commit | Aide complète d'une commande (ou git commit -h pour la version courte) |
Créer et cloner un dépôt
| Commande | Ce qu'elle fait |
|---|---|
git init | Crée un dépôt vide (dossier .git) dans le répertoire courant |
git init my-project | Crée le répertoire my-project et un dépôt à l'intérieur |
git clone https://github.com/user/repo.git | Copie un dépôt distant avec tout son historique |
git clone git@github.com:user/repo.git app | Clone en SSH dans le dossier app |
git clone --depth 1 URL | Clone superficiel : uniquement le dernier commit, rapide et léger |
git clone -b develop URL | Clone et se place directement sur la branche develop |
Le cycle de base : status, add, commit
C'est le cœur du travail quotidien : voir ce qui a changé, sélectionner ce qu'il faut dans l'index et l'enregistrer par un commit.
| Commande | Ce qu'elle fait |
|---|---|
git status | État : fichiers modifiés, indexés et non suivis |
git status -s | Format court : M — modifié, A — ajouté, ?? — non suivi |
git add file.txt | Ajouter un fichier à l'index |
git add . | Ajouter toutes les modifications du répertoire courant et en dessous, suppressions comprises |
git add -A | Ajouter toutes les modifications de tout le dépôt |
git add -p | Choisir en interactif des fragments (hunks) de modifications |
git commit -m "Ajouter le formulaire de connexion" | Créer un commit à partir de l'index avec un message |
git commit -am "Corriger une coquille" | Indexer tous les fichiers suivis modifiés et commiter ; les nouveaux fichiers n'y entrent pas |
git commit --amend | Réécrire le dernier commit : ajouter un oubli depuis l'index ou corriger le message |
git commit --amend --no-edit | Compléter le dernier commit sans changer le message |
git rm file.txt | Supprimer un fichier du disque et de l'index |
git rm --cached secret.env | Ne plus suivre un fichier tout en le gardant sur le disque |
git mv old.js new.js | Renommer ou déplacer un fichier |
Un scénario typique ressemble à ceci :
git status
git add src/login.js src/login.css
git diff --staged # vérifier ce qui partira exactement dans le commit
git commit -m "Ajouter le formulaire de connexion"
N'utilisez pas --amend sur des commits déjà poussés sur une branche partagée : il crée un nouveau commit avec un autre hash, et vos collègues devront gérer la divergence d'historique.
Consulter l'historique et les modifications
| Commande | Ce qu'elle fait |
|---|---|
git log | Historique des commits de la branche courante |
git log --oneline | Chaque commit sur une ligne : hash court et titre |
git log --oneline --graph --all | Graphe de toutes les branches dans le terminal |
git log -p file.txt | Historique d'un fichier avec le diff de chaque commit |
git log --author="Marie" --since="2 weeks ago" | Filtrer par auteur et par date |
git log -S "getUser" | Commits où la chaîne getUser a été ajoutée ou supprimée |
git log main..feature | Commits présents dans feature mais absents de main |
git diff | Modifications du répertoire de travail pas encore ajoutées à l'index |
git diff --staged | Modifications de l'index par rapport au dernier commit (synonyme de --cached) |
git diff main feature | Différence entre les extrémités de deux branches |
git diff HEAD~3 -- src/ | Modifications du dossier src sur les trois derniers commits |
git show a1b2c3d | Métadonnées et diff d'un commit précis |
git show HEAD:README.md | Contenu d'un fichier dans le dernier commit |
git blame app.js | Qui a modifié chaque ligne en dernier, et dans quel commit |
git shortlog -sn | Nombre de commits par auteur |
Les références de commits servent partout : HEAD — le commit courant, HEAD~1 — son parent, HEAD~3 — trois pas en arrière via le premier parent, HEAD^2 — le second parent d'un commit de merge.
Branches : créer, changer, supprimer
Depuis la version 2.23, Git propose git switch pour les branches et git restore pour les fichiers — elles se partagent le travail de git checkout, qui faisait trop de choses. Les anciennes formes fonctionnent toujours.
| Commande | Ce qu'elle fait |
|---|---|
git branch | Liste des branches locales, la courante est marquée d'un * |
git branch -a | Branches locales et distantes (remote-tracking) |
git branch -vv | Branches avec leur dernier commit et leur retard/avance sur l'upstream |
git branch feature/login | Créer une branche sans s'y placer |
git switch feature/login | Passer sur une branche |
git switch -c feature/login | Créer une branche et s'y placer (équivalent de git checkout -b) |
git switch - | Revenir à la branche précédente |
git branch -m new-name | Renommer la branche courante |
git branch -d feature/login | Supprimer une branche si elle a déjà été fusionnée |
git branch -D feature/login | Supprimer une branche de force, même non fusionnée |
git branch --merged | Branches déjà fusionnées dans la branche courante — candidates à la suppression |
Fusion et rebase
| Commande | Ce qu'elle fait |
|---|---|
git merge feature | Fusionner feature dans la branche courante (fast-forward si possible) |
git merge --no-ff feature | Toujours créer un commit de merge |
git merge --squash feature | Rassembler toutes les modifications de la branche dans l'index en un seul lot, puis git commit |
git merge --abort | Annuler une fusion en conflit et revenir à l'état initial |
git rebase main | Rejouer les commits de la branche courante par-dessus main |
git rebase -i HEAD~4 | En interactif : fusionner (squash), renommer, réordonner, supprimer les 4 derniers commits |
git rebase --continue | Continuer après avoir résolu un conflit |
git rebase --abort | Annuler complètement le rebase |
git cherry-pick a1b2c3d | Appliquer un seul commit sur la branche courante sous forme de nouveau commit |
La résolution d'un conflit de fusion se déroule presque toujours de la même façon :
git merge feature
# CONFLICT (content): Merge conflict in app.js
git status # fichiers dans la section "both modified"
# on corrige app.js, on retire les marqueurs <<<<<<< ======= >>>>>>>
git add app.js
git commit # Git propose un message de commit de merge tout prêt
La règle d'or du rebase : ne rebasez pas des commits qui se trouvent déjà sur une branche partagée et sur lesquels d'autres construisent leur travail.
Travailler avec les dépôts distants
| Commande | Ce qu'elle fait |
|---|---|
git remote -v | Liste des remotes et de leurs adresses |
git remote add origin git@github.com:user/repo.git | Associer un dépôt distant sous le nom origin |
git remote set-url origin NEW_URL | Changer l'adresse d'un remote (par exemple HTTPS vers SSH) |
git remote remove upstream | Retirer un remote |
git fetch | Télécharger les nouveaux commits et branches sans toucher à vos fichiers |
git fetch --prune | Idem, et supprimer les références aux branches effacées sur le serveur |
git pull | git fetch + fusion de la branche upstream dans la branche courante |
git pull --rebase | git fetch + rebase de vos commits par-dessus ceux récupérés |
git push | Envoyer les commits de la branche courante vers son upstream |
git push -u origin feature/login | Premier envoi d'une branche avec définition de l'upstream |
git push --force-with-lease | Écraser la branche distante seulement si personne n'y a ajouté de nouveaux commits |
git push origin --delete feature/login | Supprimer une branche sur le serveur |
git push --tags | Envoyer tous les tags locaux |
Au lieu de git push --force, prenez l'habitude de --force-with-lease : si un collègue a poussé entre-temps sur la même branche, la commande refusera d'écraser son travail.
Annuler des modifications
La partie la plus stressante de Git. La question clé avant de choisir une commande : les modifications sont-elles seulement dans les fichiers, déjà dans l'index, dans un commit local ou dans un commit publié ?
| Situation | Commande |
|---|---|
| Annuler les modifications d'un fichier (revenir au dernier commit) | git restore app.js |
| Retirer un fichier de l'index en gardant les modifications | git restore --staged app.js |
| Restaurer un fichier depuis un commit précis | git restore --source=a1b2c3d app.js |
| Annuler le dernier commit en gardant les modifications dans l'index | git reset --soft HEAD~1 |
| Annuler le dernier commit en gardant les modifications dans les fichiers | git reset HEAD~1 (mode --mixed par défaut) |
| Supprimer le dernier commit et toutes ses modifications | git reset --hard HEAD~1 |
| Annuler un commit publié par un nouveau commit « inverse » | git revert a1b2c3d |
| Annuler un commit de merge | git revert -m 1 <merge-hash> |
| Voir quels fichiers non suivis seraient supprimés | git clean -n |
| Supprimer les fichiers et dossiers non suivis | git clean -fd |
| Retrouver un commit « perdu » après un reset ou un rebase | git reflog, puis git reset --hard HEAD@{2} |
git reset --hard et git clean -f suppriment définitivement les modifications non commitées : le reflog ne conserve que les commits, pas les modifications du répertoire de travail. Avant de les lancer, faites un git stash ou au moins un git status.
Stash : mettre de côté un travail inachevé
| Commande | Ce qu'elle fait |
|---|---|
git stash | Mettre de côté les modifications des fichiers suivis et nettoyer le répertoire de travail |
git stash push -u -m "wip: formulaire" | Mettre de côté avec les fichiers non suivis, avec une description |
git stash list | Liste des lots mis de côté : stash@{0}, stash@{1}… |
git stash show -p stash@{0} | Afficher le diff d'un lot |
git stash pop | Restaurer le dernier lot et le retirer de la liste |
git stash apply stash@{1} | Restaurer un lot en le gardant dans la liste |
git stash drop stash@{1} | Supprimer un lot |
git stash branch fix-form | Créer une branche à partir du commit où le stash a été fait et l'y appliquer |
Tags et releases
| Commande | Ce qu'elle fait |
|---|---|
git tag | Liste des tags |
git tag -a v1.2.0 -m "Release 1.2.0" | Tag annoté avec auteur, date et message |
git tag v1.2.0 a1b2c3d | Tag léger sur un commit précis |
git push origin v1.2.0 | Envoyer un seul tag |
git tag -d v1.2.0 | Supprimer un tag en local |
git push origin --delete v1.2.0 | Supprimer un tag sur le serveur |
git describe --tags | Tag le plus proche et nombre de commits depuis, par exemple v1.2.0-3-ga1b2c3d |
Commandes Git avancées
| Commande | Ce qu'elle fait |
|---|---|
git bisect start, git bisect bad, git bisect good v1.1.0 | Recherche dichotomique du commit qui a introduit un bug ; à la fin, git bisect reset |
git worktree add ../hotfix main | Un second dossier de travail sur une autre branche du même dépôt |
git submodule update --init --recursive | Télécharger les sous-modules après un clone |
git grep "TODO" | Recherche rapide dans les fichiers suivis |
git format-patch -1 HEAD / git apply fix.patch | Enregistrer un commit sous forme de patch et appliquer un patch au répertoire de travail |
git gc | Compacter les objets et nettoyer le dépôt (Git le fait généralement tout seul) |
Erreurs fréquentes et comment les corriger
Commit fait sur main au lieu d'une nouvelle branche
Si le commit n'a pas encore été poussé, créez une branche sur le commit courant et ramenez main en arrière :
git branch feature/login # la branche pointe sur votre commit
git reset --hard HEAD~1 # main recule d'un cran
git switch feature/login
Fichier oublié dans le dernier commit
git add forgotten.js
git commit --amend --no-edit
Push refusé : rejected, non-fast-forward
Le serveur contient des commits que vous n'avez pas. Récupérez-les d'abord, puis poussez :
git pull --rebase
git push
Un fichier de mots de passe commité par erreur
Retirez-le du suivi et ajoutez-le au .gitignore : git rm --cached .env, puis un commit. Si le commit est déjà publié, considérez le secret comme compromis et renouvelez-le — il est toujours présent dans l'historique.
En résumé
Pour le travail quotidien, un petit ensemble suffit : status, add, commit, switch, merge, pull, push et log --oneline. Choisissez les commandes d'annulation — restore, reset, revert — selon que le commit est publié ou non, et gardez reflog en tête comme filet de sécurité de dernier recours. Toutes les commandes Git de cet aide-mémoire sont mises en pratique dans le cours Git, où vous les essayez chacune dans votre propre dépôt.
Questions fréquentes
Combien de commandes Git un débutant doit-il connaître ?
Pour commencer, 10 à 12 suffisent : init, clone, status, add, commit, log, diff, branch, switch, merge, pull et push. Les autres s'apprennent au fil des besoins.
Quelle différence entre git switch et git checkout ?
git switch sait seulement changer de branche et en créer, alors que git checkout restaure aussi des fichiers. La séparation entre switch et restore évite d'écraser des modifications par erreur en confondant une branche et un fichier.
Comment afficher l'aide de n'importe quelle commande Git ?
Lancez git help nom-de-la-commande pour le manuel complet ou git nom-de-la-commande -h pour la liste résumée des options. La même documentation est disponible sur git-scm.com.
Peut-on raccourcir les commandes Git trop longues ?
Oui, avec des alias : git config --global alias.lg "log --oneline --graph --all" vous permet ensuite de taper git lg.
Ces commandes fonctionnent-elles sous Windows ?
Oui, les commandes sont identiques sur tous les systèmes. Sous Windows, on les exécute facilement dans Git Bash, PowerShell ou le terminal de l'éditeur de code.
Ce sujet est traité en détail avec de la pratique dans le cours « Git de zéro à développeur confirmé ».
- Premier dépôt : init, add, commit et la magie de l'index
- Lire l'historique : log, diff, show et navigation dans le passé
- Branches : la réalité parallèle de votre code
- Annuler les erreurs : restore, reset, revert — faire les bons choix sans danger
- GitHub et les dépôts distants : votre code dans le cloud
- Outils avancés : rebase, stash, cherry-pick et les tags