Que dit exactement git status ?
La réponse détermine la famille d’action. Ne mélange pas plusieurs réparations à la fois.
Boîte à outils Git
Diagnostiquer un dépôt, choisir un workflow et agir avec le bon niveau de prudence. Une annexe conçue pour être consultée pendant une vraie situation de travail.
Clavier : flèches gauche/droite, Début et Fin.
Protocole anti-panique
Git conserve souvent plus de portes de sortie qu’on ne l’imagine. Ce protocole privilégie les actions lisibles et réversibles avant toute suppression ou réécriture.
Confirme le dépôt, la branche et les fichiers concernés. Ne lance encore aucune réparation.
git rev-parse --show-toplevel
git status --short --branchLe message complet de status dit si Git attend un merge, rebase, cherry-pick ou revert.
git statusFetch met à jour ta vision du distant sans toucher à ta branche de travail.
git fetch --all --prune
git branch -vvLe graphe montre la divergence ; le reflog retrouve les déplacements locaux de HEAD.
git log --oneline --decorate --graph --all -20
git reflog --date=local -20Avant une réécriture, donne un nom au commit courant. Une branche ne copie rien : elle pose un repère.
git branch rescue/avant-reparationgit status ?La réponse détermine la famille d’action. Ne mélange pas plusieurs réparations à la fois.
Résous, indexe, puis continue. Si le contexte est mauvais, utilise l’abandon correspondant.
git merge --abort
git rebase --abort
git cherry-pick --abort
git revert --abortConserve aussi les fichiers non suivis, puis vérifie que la copie de travail est propre.
git stash push -u -m "sauvetage avant diagnostic"Repère le hash encore visible, inspecte-le, puis crée une branche de récupération.
git reflog
git show <hash>
git switch -c rescue/commit-retrouve <hash>Sur une branche partagée, revert communique clairement l’annulation sans déplacer les autres.
git revert <hash>Soft reset replace les changements dans l’index pour recomposer le commit.
git branch rescue/avant-reset
git reset --soft HEAD~1Ouvre chaque fichier, enlève les marqueurs, teste, indexe, puis continue l’opération nommée par status.
git diff --name-only --diff-filter=U
git add <fichier-resolu>
git statusAtlas opérationnel
Cherche une intention, une commande ou un symptôme. Le niveau de risque décrit la portée de l’action, pas sa difficulté syntaxique.
50 recettes trouvées
git init -b mainCrée le dossier .git et démarre directement sur la branche main.
git clone <url-du-depot>Télécharge l’historique, configure origin et crée une copie de travail.
git status --short --branchAffiche branche, avance/retard, fichiers indexés, modifiés et non suivis.
git log --oneline --decorate --graph --allDessine l’historique condensé avec les références de branches et de tags.
git diffCompare la copie de travail avec l’index avant un git add.
git diff --stagedMontre exactement ce qui partirait dans le prochain commit.
git show <hash-ou-reference>Affiche les métadonnées et le patch d’un commit, tag ou HEAD.
git branch --verbose --verboseListe la branche courante, son dernier commit et sa branche distante suivie.
git remote -vAffiche les adresses utilisées pour récupérer et envoyer les commits.
git rev-parse --show-toplevelRévèle le dossier racine quand le terminal se trouve dans un sous-dossier.
git blame -L 20,40 -- src/app.jsAssocie chaque ligne de la plage à son dernier commit, pour retrouver le contexte.
git reflog --date=localListe les déplacements locaux de HEAD, même après reset ou rebase.
git merge-base main feature/paiementRetourne le commit depuis lequel deux branches ont divergé.
git add src/app.jsPrépare la version actuelle de ce fichier pour le prochain commit.
git add --patchChoisit interactivement les blocs à indexer pour garder des commits cohérents.
git restore --staged src/app.jsSort le fichier du prochain commit tout en conservant ses modifications.
git restore src/app.jsRemet le fichier dans l’état enregistré dans l’index.
git commit -m "Ajoute la validation du panier"Enregistre le contenu de l’index avec un message orienté intention.
git commit --amend --no-editRemplace le dernier commit avec le contenu actuellement indexé.
git switch -c feature/paiementCrée une branche au commit courant et déplace HEAD dessus.
git switch mainDéplace HEAD sur la branche demandée et actualise la copie de travail.
git branch -m ancien-nom nouveau-nomChange le nom local sans modifier les commits.
git branch -d feature/paiementSupprime la référence locale seulement si Git la considère intégrée.
git stash push -u -m "WIP panier"Range les fichiers suivis et non suivis, puis nettoie la copie de travail.
git stash listAffiche les stash disponibles et leurs références stash@{n}.
git stash show --patch stash@{0}Montre le patch stocké avant de décider de le réappliquer.
git stash popRéapplique le stash puis le retire de la liste si tout se passe bien.
git fetch --all --pruneTélécharge les références distantes et retire celles supprimées sur le serveur.
git pull --ff-onlyAvance la branche seulement si aucun commit local ne provoque de divergence.
git pull --rebaseRécupère le distant puis replace les commits locaux au-dessus.
git push -u origin feature/paiementEnvoie la branche et configure son suivi pour les prochains push/pull.
git push --force-with-lease origin feature/paiementForce seulement si la branche distante n’a pas changé depuis ton dernier fetch.
git merge --no-ff feature/paiementCrée un commit de merge même quand un fast-forward serait possible.
git merge --abortTente de revenir à l’état précédant le merge interrompu.
git rebase origin/mainRejoue les commits de la branche courante au-dessus de origin/main.
git add <fichiers-resolus>
git rebase --continueValide la résolution des conflits puis poursuit le commit suivant.
git rebase --abortRevient à la branche telle qu’elle était avant le début du rebase.
git rebase -i HEAD~4Permet de réordonner, fusionner, reformuler ou supprimer les quatre derniers commits.
git cherry-pick <hash>Copie le changement d’un commit sur la branche courante avec un nouveau hash.
git revert <hash>Crée un nouveau commit qui applique l’inverse sans effacer l’historique.
git tag -a v1.4.0 -m "Version 1.4.0"Crée un tag annoté, daté et documenté sur le commit courant.
git push origin v1.4.0Envoie uniquement ce tag vers le dépôt distant.
git worktree add ../hotfix -b hotfix/login origin/mainCrée une branche et une autre copie de travail sans recloner le dépôt.
git worktree remove ../hotfixSupprime la copie de travail liée après vérification qu’elle est propre.
git bisect start
git bisect bad
git bisect good <hash-sain>Démarre une recherche binaire entre un état cassé et un état connu comme sain.
git bisect good
# ou
git bisect badRéduit de moitié la zone de recherche après chaque test manuel ou automatisé.
git bisect resetTermine bisect et revient à la branche ou au commit de départ.
git clean -ndListe les fichiers et dossiers non suivis qui seraient supprimés, sans agir.
git clean -fdSupprime réellement les fichiers et dossiers non suivis.
git reset --soft HEAD~1Déplace la branche d’un commit en arrière et garde tous les changements indexés.
Architecture d’équipe
Aucun flux n’est universel. Choisis selon la fréquence de livraison, la maturité de la CI, la durée des validations et le nombre de versions maintenues — puis écris les règles dans le dépôt.
Une branche principale livrable et des branches courtes revues par pull request.
git switch -c feature/paiement
git push -u origin feature/paiement
git fetch origin && git rebase origin/main
git switch main && git pull --ff-onlyDes branches dédiées séparent développement, préparation de version et correctifs urgents.
git switch develop && git switch -c feature/paiement
git switch develop && git merge --no-ff feature/paiement
git switch -c release/1.4 develop
git switch main && git merge --no-ff release/1.4Tout le monde intègre de très petits changements sur un trunk toujours sain.
git switch main && git pull --ff-only
git switch -c task/validation-cvv
git commit -m "Ajoute la validation CVV"
git rebase origin/main && git push -u origin task/validation-cvvModèle mental
Les définitions privilégient ce qui aide à décider. Lis les couples reset/revert, fetch/pull et working tree/index/commit ensemble : leurs différences expliquent la plupart des erreurs.
Poste de travail + dépôt
Applique ces réglages consciemment, puis laisse le dépôt et la plateforme imposer les règles communes. Les blocs sont sélectionnables pour être copiés, sans script ni accès au presse-papiers.
Des commits attribuables et un nom de branche cohérent dès la création du dépôt.
git config --global user.name "Prénom Nom"
git config --global user.email "vous@exemple.com"
git config --global init.defaultBranch maingit config --show-origin --get-regexp "user\.(name|email)|init\.defaultBranch"Éviter qu’un simple pull crée un merge inattendu. Choisis une politique avec l’équipe.
git config --global pull.rebase true
git config --global rebase.autoStash truegit config --global pull.rebase false
git config --global pull.ff onlyRetirer les branches distantes disparues et réutiliser une résolution de conflit déjà effectuée.
git config --global fetch.prune true
git config --global rerere.enabled true
git config --global rerere.autoupdate truePartager les mêmes contrôles locaux au lieu de dépendre du dossier .git/hooks non versionné.
mkdir -p .githooks
git config core.hooksPath .githooks
chmod +x .githooks/pre-commitAccélérer l’observation sans masquer une opération destructive ou difficile à mémoriser.
git config --global alias.st "status --short --branch"
git config --global alias.lg "log --graph --decorate --oneline --all"
git config --global alias.unstage "restore --staged --"Écarter dépendances, sorties générées, fichiers locaux et secrets avant leur première indexation.
node_modules/
dist/
.env*
!.env.example
.DS_Store
*.loggit check-ignore -v .env.localPermettre à la plateforme de vérifier l’origine cryptographique des commits et tags sensibles.
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
git config --global tag.gpgsign truegit log --show-signature -1Faire respecter les règles critiques côté plateforme, là où elles s’appliquent à toute l’équipe.
La provenance explique pourquoi une valeur locale peut remplacer ton réglage global.
git config --show-origin --list
git status --short --branch
git remote -v
git branch -vv