L'aide-mémoire des commandes Git est un tableau directement utilisable : 149 commandes réparties en onze situations — initialisation et configuration, commits au quotidien, branches, fusions et rebase, retour en arrière et annulation, travail à distance, stash, étiquettes, sous-modules et worktrees, historique et dépannage, ignore et attributs. Chaque ligne donne une explication, un exemple à coller tel quel et un niveau de risque « attention / danger » : les commandes qui font perdre des modifications non validées ou réécrivent un historique déjà partagé se repèrent au premier coup d'œil.
L'aide-mémoire des commandes Git est un tableau directement utilisable : 149 commandes réparties en onze situations — initialisation et configuration, commits au quotidien, branches, fusions et rebase, retour en arrière et annulation, travail à distance, stash, étiquettes, sous-modules et worktrees, historique et dépannage, ignore et attributs. Chaque ligne donne une explication, un exemple à coller tel quel et un niveau de risque « attention / danger » : les commandes qui font perdre des modifications non validées ou réécrivent un historique déjà partagé se repèrent au premier coup d'œil.
Il répond à trois moments : vous savez ce que vous voulez faire mais avez oublié comment s'écrit la commande (cherchez « annuler commit », « supprimer branche distante ») ; vous connaissez la commande mais ignorez si elle peut faire perdre quelque chose (regardez le niveau de risque et les notes) ; et vous découvrez Git et voulez comprendre ce qui circule vraiment entre add, commit et push (regardez le schéma des quatre zones en haut de page et les schémas d'opérations plus bas).
En bas de page se trouve un terminal Git simulé, entièrement en mémoire : plus de 30 sous-commandes courantes, un graphe de commits qui évolue à droite en temps réel à chaque commande, et 10 niveaux d'exercice, du « premier commit » à la « résolution d'un conflit de fusion ». Ce n'est pas le vrai Git et il ne touche ni votre ordinateur ni le réseau, mais sa sémantique suit le manuel officiel : l'entraînement se transpose directement sur une machine réelle.
Comment l'utiliser
01Recherchersaisissez en haut le nom de la commande ou ce que vous voulez faire (« annuler », « push forcé », « supprimer une branche ») ; plusieurs mots séparés par des espaces sont acceptés et tous doivent correspondre ; les résultats restent classés par groupe d'origine.
02Parcourir par situationcliquez sur les chips de groupe pour n'afficher qu'une catégorie, ou utilisez le sommaire des groupes sous le schéma des « quatre zones » pour sauter à la section voulue ; cochez « voir seulement les commandes à risque » pour les relire avant de les lancer.
03Copiercliquez sur le texte bleu de la commande ou sur l'icône de copie à droite pour copier la commande, la deuxième icône copie l'exemple ; dans « combinaisons courantes », vous pouvez copier une recette entière.
04Favorisl'étoile épingle les commandes utiles en haut de page, dans « mes favoris » ; ils sont enregistrés dans le navigateur local (localStorage) et ne se synchronisent pas d'un appareil à l'autre.
05S'entraînerdescendez au « terminal d'entraînement », choisissez un niveau et tapez les commandes selon l'objectif ; chaque commande est évaluée automatiquement et, en cas de blocage, « indice » ou « solution » vous aide, « réinitialiser » ramène le niveau à son état initial.
Exemples d'entrée et de sortie
En saisissant « annuler commit » dans la recherche, on obtient ces lignes du groupe « retour en arrière et annulation » (extrait) :
La résolution du niveau 4, « annuler le dernier commit mais garder les modifications », dans le terminal simulé :
text
git reset --soft HEAD~1 annule le dernier commit, les modifications restent indexées attention
git reset HEAD~1 annule le dernier commit, les modifications reviennent non indexées dans le répertoire de travail
git reset --hard <commit> pointeur de branche, index et répertoire de travail reviennent tous à <commit> danger
git revert <commit> crée un nouveau commit qui annule les modifications, sans réécrire l'historique : push sûr
bash
user@toolun-lab:~/project (main)$ git log --oneline
7f3a1c2 (HEAD -> main) wip: commit en désordre
2b9e0d4 init: add README
user@toolun-lab:~/project (main)$ git reset --soft HEAD~1
HEAD est maintenant à 2b9e0d4 init: add README
--soft : seul le pointeur de branche bouge ; l'index et le répertoire de travail sont conservés (le contenu du commit annulé reste indexé)
Avertissement : le commit abandonné 7f3a1c2 reste récupérable avec git reflog
user@toolun-lab:~/project (main)$ git status -s
A app.js
A secret.env
✔ Niveau réussi : annuler le dernier commit, mais garder les modifications.
Fonctionnement
Les quatre zones : les commandes ne font que déplacer des données
Presque toutes les commandes Git se comprennent comme « déplacer du contenu d'une zone vers une autre ». Le répertoire de travail, ce sont les fichiers que vous voyez et pouvez modifier ; l'index (staging area) est la liste de « à quoi ressemblera le prochain commit » ; le dépôt local (.git) conserve tous les commits ; le dépôt distant est le même ensemble sur une autre machine.
add vers l’index, commit vers le dépôt, push vers le distant ; en sens inverse, fetch et restore
Une fois ce schéma compris, beaucoup de questions « comment annuler ? » ont une réponse unique : erreur pas encore add, récupérez avec git restore <file> depuis l'index ; add fait mais commit non voulu, utilisez git restore --staged ; commit fait et à défaire, utilisez git reset ; déjà poussé, seul git revert peut ajouter un commit inverse.
Un commit est un instantané, une branche n'est qu'un pointeur
Un objet commit enregistre : l'instantané de toute l'arborescence (pas un diff), l'id du commit parent, l'auteur et l'horodatage, et le message. Cet ensemble est haché en SHA-1 (SHA-256 en option sur les nouveaux dépôts) pour produire l'id du commit : la moindre modification, fût-ce une lettre du message, donne donc un id entièrement nouveau. C'est pourquoi --amend, rebase et cherry-pick « réécrivent l'historique » : ils créent de nouveaux commits et les anciens cessent simplement d'être référencés.
Une branche est un fichier de 40 caractères dans .git/refs/heads/<name>, dont le contenu est l'id d'un commit. HEAD pointe en général vers le nom d'une branche. Créer une branche est donc instantané (écrire un petit fichier) ; changer de branche consiste à faire pointer HEAD vers un autre nom et à mettre le répertoire de travail à jour avec l'instantané de ce commit ; supprimer une branche ne fait que supprimer un pointeur : les commits eux-mêmes ne disparaissent pas immédiatement.
Choisir entre merge et rebase
même point de départ, deux historiques selon merge ou rebase
merge consigne fidèlement ce qui s'est passé : les deux lignes se rejoignent au commit de fusion et chacun peut voir que cette fonctionnalité a été développée en parallèle. rebase donne l'impression d'un historique toujours linéaire, avec un git log plus lisible et un git bisect plus efficace, mais au prix d'un changement de tous les ids de commit. Règle empirique : rebasez librement vos branches personnelles pas encore poussées ; sur une branche que d'autres utilisent peut-être, faites seulement des merge. git pull --rebase est l'application quotidienne de cette règle : il replace vos quelques commits locaux non poussés après le dernier commit distant et évite une série de « Merge branch 'main' of … ».
Les trois modes de reset
quelle zone chacun des trois modes ramène au commit cible
--soft convient à « scinder ou regrouper des commits » : le pointeur recule, le contenu reste dans l'index. --mixed (par défaut) convient à « choisir à nouveau ce que l'on valide ». --hard abandonne vraiment : les modifications jamais validées du répertoire de travail ne peuvent plus être récupérées, alors que les commits annulés restent dans la base d'objets ; git reflog montre chaque déplacement de HEAD et git reset --hard HEAD@{1} ramène à l'état d'avant le reset. Par défaut, le reflog est conservé 90 jours (30 jours pour les entrées inaccessibles) : c'est la fenêtre de rattrapage offerte par Git.
Comment le niveau de risque est déterminé
La mention « danger » vise deux familles : les commandes qui abandonnent du contenu non validé du répertoire de travail (restore, reset --hard, clean, stash drop, checkout -- <file>) et celles qui réécrivent un historique que d'autres ont pu récupérer (push --force, branch -D sur une branche non fusionnée). « Attention » vise les commandes qui changent l'état mais restent rattrapables, ou qui exigent de vérifier d'abord leur portée (commit --amend, rebase, merge --squash, push --delete). Les commandes en lecture seule (log, diff, status, show, blame) ne portent aucune mention.
Portée et limites
Source des commandes
le manuel officiel de Git (git-scm.com/docs, Git 2.4x) fait référence ; git switch / git restore exigent la version 2.23 ou supérieure, et l'ancienne écriture checkout est aussi listée.
Critères d'inclusion
les commandes et options utiles au développement quotidien, à la collaboration et au dépannage ; chacune trouve son explication dans une page de manuel. Les commandes plumbing (hash-object, cat-file, update-ref, etc.) et les opérations propres à une plateforme (actions web des PR GitHub ou MR GitLab) sont exclues.
Terminal simulé
il implémente la sémantique essentielle des sous-commandes courantes (avance rapide ou fusion à trois branches, détection des conflits fichier par fichier, les trois modes de reset, rebase linéaire, stash, push et pull distants) ; il ne prend pas en charge le rebase interactif, bisect, les sous-modules, les hooks ni toutes les options des fichiers de configuration, et un rebase qui rencontre un conflit s'abandonne automatiquement au lieu d'attendre votre résolution.
Ce que l'outil ne fait pas
il ne se connecte à aucun dépôt réel, ne lit pas le .git de votre ordinateur et ne fournit pas de résolveur de conflits graphique.
Favoris et récents
conservés uniquement dans le navigateur local ; effacer les données du site les supprime.
Cas d'usage typiques
Un commit trop tôt, mal écrit ou sur la mauvaise branche
Cherchez « annuler » ou ouvrez le groupe « retour en arrière et annulation », distinguez d'abord « pas encore poussé » (reset / --amend) et « déjà poussé » (revert), puis choisissez la commande. Dans « combinaisons courantes » se trouvent des recettes complètes, comme « j'ai commité sur main et veux le déplacer sur une nouvelle branche ».
Nettoyer les commits en vrac avant une fusion
git rebase -i HEAD~N avec squash, fixup ou reword ; la carte rebase des schémas montre comment l'historique passe d'une bifurcation à une ligne droite et pourquoi les anciens commits deviennent gris.
Première collaboration : dépôt distant, suivi, push refusé
Le groupe « travail à distance » va de remote add à push -u et --force-with-lease ; les niveaux 8 (pousser) et 9 (annuler un commit déjà poussé) du terminal d'entraînement couvrent les deux « je n'arrive pas à pousser » les plus fréquents.
Retrouver ce qui a « disparu »
git reflog, git fsck --lost-found et git stash list sont voisins dans « retour en arrière et annulation » ; la recette « retrouver une branche supprimée par erreur » se fait en deux étapes.
FAQ
git reset ou git revert, lequel choisir ?
Tout dépend de savoir si le commit a été poussé. Pas poussé : reset ramène directement le pointeur en arrière et l'historique reste propre. Déjà poussé : revert ajoute un commit inverse sans réécrire l'historique que d'autres ont déjà ; sinon, leur prochain pull tombera sur une bifurcation.
Pourquoi un commit « Merge branch 'main' of … » apparaît-il après un git pull ?
Parce que vous avez des commits locaux non poussés et que le distant en a de nouveaux : le pull par défaut réunit les deux côtés par une fusion. Pour l'éviter, utilisez git pull --rebase ou réglez-le une fois pour toutes avec git config --global pull.rebase true.
Quelle différence entre --force et --force-with-lease ?
--force écrase la branche distante sans condition. --force-with-lease vérifie d'abord que la branche distante est toujours au commit vu lors de votre dernier fetch et refuse si quelqu'un a poussé du nouveau : l'accident « écraser le commit d'un collègue » est bloqué. Après une réécriture d'historique, poussez toujours avec cette variante.
Pourquoi l'id de commit du terminal simulé est-il toujours le même ?
Dans le vrai Git, l'id résulte du hachage du contenu, de l'auteur et de l'horodatage ; le simulateur remplace le temps réel par une horloge logique et utilise un hachage déterministe : la même séquence d'opérations donne le même id, pratique pour comparer avec la solution. Ses ids ne correspondent pas à ceux du vrai Git, et c'est volontaire.
Les commandes de l'aide-mémoire fonctionnent-elles sous Windows ?
Les commandes elles-mêmes sont identiques d'une plateforme à l'autre. La différence est dans le shell : sous PowerShell, && exige la version 7.x et il est plus sûr d'entourer les chemins de guillemets ; pour les fins de ligne, suivez l'entrée core.autocrlf du groupe « initialisation et configuration ».
Confidentialité
Toutes les données de cette page (tableau de commandes, schémas, terminal simulé) sont du contenu statique téléchargé avec la page et exécuté dans votre navigateur ; la recherche, la copie, les favoris et les exercices n'envoient aucune requête au serveur. Les favoris sont conservés dans le localStorage de la machine et le site ne peut pas les lire. Les liens externes pointent vers la documentation officielle de Git et, une fois cliqués, relèvent du site de destination.
Références et lectures complémentaires
Git Reference Manual(consulté le 2026-09-09) — la page de manuel de référence pour chaque commande ; toutes les entrées de cette page ont été vérifiées à partir d'elle.
Pro Git, 2e édition (en anglais)(consulté le 2026-09-09) — le chapitre 3 « Branches » et la section 7.7 « Reset démystifié » sont la meilleure entrée en matière pour comprendre les pointeurs et les trois zones.
Page de manuel git-reset(consulté le 2026-09-09) — le tableau officiel des effets des trois modes sur HEAD, l'index et le répertoire de travail.
Page de manuel git-rebase(consulté le 2026-09-09) — la section « Recovering from upstream rebase » explique pourquoi il ne faut pas rebaser une branche partagée.
149 commandes Git classées par situation, chacune avec explication, exemple et niveau de risque, avec recherche, copie en un clic et favoris ; schémas et terminal d’entraînement inclus
Cet outil n’est pas entièrement traduit ; certains contenus utilisent la langue source ou une langue de repli.
Total : 149 commandes
Les données circulent entre les quatre zones : add vers la zone de préparation, commit vers le dépôt local, push vers le dépôt distant ; dans l’autre sens, fetch / restore / switch. pull = fetch + merge.
Initialisation et configuration
14 entrées· Nouveaux référentiels, clones, identités et configurations communes
Transformez le répertoire actuel en référentiel Git (générez .git/)
git init
git init -b main # Spécifie le nom initial de la branche
Clonez le référentiel distant localement et configurez automatiquement l'origine
Stocker temporairement toutes les modifications : nouvelles, modifiées, supprimées (git add . Équivalent en 2.x)
git add -A
git add -u # Seules les modifications et suppressions temporaires des fichiers suivis sont stockées, à l'exclusion des nouveaux fichiers.
Appuyez de manière interactive sur « bloquer » pour sélectionner les modifications à effectuer et valider uniquement une partie d'un fichier.
git add -p src/app.js
# y sauvegarder temporairement ce morceau n sauter s diviser en morceaux plus petits q quitter
Transformez le contenu de la zone de préparation en une commit
git commit -m "fix: Corriger le jugement du délai de connexion"
Ignorer l'ajout : organiser automatiquement les validations modifiées des fichiers suivis (les nouveaux fichiers ne seront pas inclus)Attention
git commit -am "docs: update readme"
Il est facile d’apporter des changements que vous ne souhaitez pas engager. Exécutez simplement git status avant de vous engager.
Remplacez la dernière commit par le contenu de la zone de préparation + nouvelle description (corriger les fautes de frappe, remplir les fichiers manquants)Attention
git add forgotten.js
git commit --amend --no-edit #Ajouter des fichiers mais ne pas modifier la description
git commit --amend -m "nouvelle description"
Générez un nouvel identifiant de commit ; ne modifiez pas les commits qui ont déjà été poussées, sinon elles doivent être poussées.
Créer un commit vide sans modification (déclencheur CI, marqueur de nœud)
Espace de travail vs zone de transit : aucune modification à ajouter pour l'instant
git diff
git diff src/app.js # Afficher un seul fichier
Zone de transit vs dernier commit : contenu à soumettre (synonyme --caché)
git diff --staged
Comparez les différences entre deux commits/branches
git diff main feature
git diff HEAD~3 HEAD -- src/
git diff main...feature # Modifications des fonctionnalités par rapport au point de fourche
Regardez uniquement les statistiques du nombre de lignes modifiées pour chaque fichier.
git diff --stat HEAD~1
Afficher les différences par mot plutôt que par ligne, ce qui facilite la visualisation des modifications de rédaction
git diff --word-diff=color README.md
Afficher l'historique des validations
git log
git log -5 # 5 dernières entrées
git log --oneline # Une ligne par ligne
L'historique de toutes les branches est dessiné sous forme de diagramme avec des noms de référence
git log --oneline --graph --all --decorate
Afficher les informations et les modifications d'un commit
git show HEAD
git show a1b2c3d --stat
git show HEAD:src/app.js # Afficher le contenu du fichier d'une certaine version
Supprimez le fichier et placez "supprimer" dans la zone de stockage temporaire
git rm old.txt
git rm -r legacy/
Supprimez et conservez uniquement les fichiers locaux du référentiel (utilisé lorsque node_modules / .env est soumis par erreur)
git rm --cached .env
echo ".env" >> .gitignore
Renommer/déplacer les fichiers et la scène (égal à mv + git add)
git mv utils.js helpers.js
bifurquer
14 entrées· Créer, changer, renommer, supprimer
Liste des branches locales (* est la branche actuelle)
git branch
git branch -a # inclut les branches distantes
git branch -vv # Avec la dernière relation de validation et de suivi
Créer une branche au niveau du commit actuel sans y basculer
git branch feature/login
git branch hotfix a1b2c3d # Créer à partir du commit spécifié
Passer à une branche existante (2.23+ ; ancienne façon d'écrire git checkout <branch>)
git switch main
git switch - #Revenir à la branche précédente
Créer et passer à une nouvelle branche (ancienne façon d'écrire git checkout -b)
git switch -c feature/search
git switch -c hotfix origin/main # Basé sur la branche distante
Créer et changer (ancienne façon d'écrire, disponible dans toutes les versions)
git checkout -b release/1.2
Renommer la branche (omettre l'ancien renommera la branche actuelle)
git branch -m master main
git push -u origin main && git push origin --delete master
Supprimer les branches locales fusionnées (les branches non fusionnées seront rejetées)
git branch -d feature/login
Forcer la suppression des branches locales, qu'elles fusionnent ou nonDanger
git branch -D experiment
Les commits uniques sur la branche deviendront orphelins et pourront être récupérés à l'aide de reflog à court terme.
Liste les branches qui ont été fusionnées dans la branche actuelle (regardez-la d'abord lors du nettoyage)
git branch --merged main
git branch --no-merged # à l'inverse
Définir l'amont de la branche actuelle sur une branche distante (il n'est pas nécessaire d'écrire des paramètres pour le pull/push par la suite)
git branch -u origin/feature/login
Quelles branches contiennent ce commit
git branch -a --contains a1b2c3d
Extrayez un commit et entrez dans l'état "pointeur de tête détaché". Utilisez-le uniquement lorsque vous souhaitez apporter des modifications.Attention
git checkout v1.0
git switch -c fix-from-v1 # Si vous souhaitez conserver les modifications, créez une branche ici
Les commits dans cet état n’appartiennent à aucune branche et sont facilement perdues après avoir été coupées.
Répertoriez les branches triées par heure de commit récente pour savoir ce qui vous a occupé récemment
git branch --sort=-committerdate | head
Supprimer les références de branche distante qui n'existent plus lors de l'extraction (élagage)
git fetch -p
git remote prune origin
Fusionner et rebaser
16 entrées· fusion/rebase/cherry-pick et gestion des conflits
Fusionner la branche dans la branche actuelle : avance rapide si vous le pouvez, sinon un commit de fusion sera généré
git switch main
git merge feature/login
Générez toujours des commits de fusion, en conservant l'historique de "il y avait une branche ici"
git merge --no-ff feature/login
Compressez toutes les modifications apportées à la branche dans un stockage temporaire et vous pourrez effectuer manuellement une validation
Lors du rebase, les sens de la nôtre/la leur sont inversés : la nôtre est la branche qui est rebasée.
"Déplacez" les commits de la branche actuelle vers la base puis rejouez-les pour obtenir l'historique en ligne droiteAttention
git switch feature
git rebase main
Tous les identifiants de validation déplacés changeront ; les branches qui ont été poussées et sur lesquelles quelqu'un travaille ne doivent pas être rebasées.
Rebase interactif : fusionner/réécrire/réorganiser/supprimer les validations après la validationAttention
git rebase -i HEAD~3
# choisir conserver reformuler modifier la description écraser fusionner avec la précédente correction fusionner et perdre la description supprimer supprimer
Rebase rencontre un conflit : résolvez et continuez après l'ajout
git add .
git rebase --continue
Abandonnez ce rebasage et revenez là où vous avez commencé
git rebase --abort
Migrer les commits de l'ancienne-base..branch vers la nouvelle-base
git rebase --onto main server client
Convient à la situation où « la branche est ouverte au mauvais endroit ».
Effectuez d'abord un commit de correction et fusionnez-le automatiquement dans le commit cible lors du rebasage
git commit --fixup a1b2c3d
git rebase -i --autosquash a1b2c3d~1
Copiez les modifications d'un certain commit dans la branche actuelle (nouvel identifiant)
N'oubliez pas la méthode de résolution des conflits et réutilisez automatiquement le même conflit la prochaine fois
Restaurer et annuler
16 entrées· Annuler l'espace de travail/zone de transit/soumettre et récupérer le contenu perdu
Supprimez les modifications de l'espace de travail et restaurez la version de la zone de préparation (ancienne façon d'écrire git checkout -- <file>)Danger
Annulez le dernier commit et renvoyez les modifications à l'espace de travail sans être mis en scène (par défaut --mixed)
git reset HEAD~1
Le pointeur de branche, la zone de stockage temporaire et la zone de travail sont tous renvoyés pour validation et les modifications non validées sont ignorées.Danger
git reset --hard HEAD~1 # Jetez le dernier commit
git reset --hard origin/main # Exactement la même chose que la télécommande
Les modifications de l'espace de travail sont irréversibles ; ceux validés peuvent être récupérés en utilisant git reflog.
Déplacer un fichier hors de la zone de préparation (conserver la zone de travail), équivalent à restaurer --staged
git reset package-lock.json
Générez un nouveau commit pour compenser les modifications du commit, l'historique reste inchangé et peut être poussé en toute sécurité
git revert HEAD
git revert a1b2c3d --no-edit
Annulez une section de commits par lots et soumettez-les ensemble à la fin
Annuler une fusion (-m 1 signifie conserver le côté du premier commit parent)Attention
git revert -m 1 f00ba12
Après avoir annulé la fusion, vous devez annuler cette restauration avant de la fusionner dans la même branche.
HEAD move record : réinitialiser/rebase/récupérer les commits "disparus" après la suppression des branches
git reflog
git reset --hard HEAD@{2} # Retour à l'état avant l'étape 2
git branch Rescue a1b2c3d # Créer une branche pour la commit orpheline
Supprimez tous les fichiers et répertoires non suivis (aperçu avec -n en premier)Danger
git clean -n # Aperçu de ce qui sera supprimé
git clean -fd # exécuter
git clean -fdx # Supprime même ceux ignorés dans .gitignore (comme node_modules)
(Ancienne façon d'écrire) Supprimer les modifications de l'espace de travail, équivalent à git restaurerDanger
git checkout -- src/app.js
Corrigez l'auteur du commit le plus récentAttention
git commit --amend --author="Zhang San <zs@example.com>" --no-edit
Répertorier les objets inaccessibles, un dernier recours lorsque le reflog n'est pas disponible
git fsck --lost-found
git show <dangling-commit-id>
Récupérer le cache qui a été accidentellement abandonné (le cache est essentiellement une commit)
Afficher la dernière personne modifiée et valider ligne par ligne
git blame -L 40,60 src/app.js
git blâme -w -C src/app.js # Ignorer les espaces, suivre les mouvements
Recherche binaire de commits introduisant des bugs
git bisect start
git bisect bad # Actuellement mauvais
git bisect good v1.1.0 # Cette version est bonne
# Testez à plusieurs reprises et exécutez git bisect good/bad
git bisect reset
Laissez le script déterminer automatiquement s'il est bon ou mauvais et divisez-le automatiquement en deux parties.
git bisect run npm test
Rechercher dans les fichiers suivis (plus rapide que grep -r et ne recherche pas node_modules)
git grep -n "TODO" -- "*.ts"
git grep "foo" v1.0 # Rechercher dans une certaine version
Visualisez directement le contenu d'une certaine version d'un fichier sans couper les branches
git show HEAD~5:src/config.js > old-config.js
Liste uniquement les noms de fichiers modifiés
git diff --name-only HEAD~3 HEAD
git diff --name-status main # avec statut M/A/D
Afficher le nombre et l'espace occupé des objets de l'dépôt
git count-objects -vH
Emballer les objets, nettoyer les déchets, réduire le .gitAttention
git gc --aggressive --prune=now
prune supprimera en fait les objets inaccessibles et le médicament contre les regrets dans le reflog disparaîtra ensemble.
Analysez la référence dans l'identifiant de validation complet ; --abbrev-ref obtient le nom de la branche
git rev-parse --short HEAD
git rev-parse --abbrev-ref HEAD
git rev-parse --show-toplevel # Répertoire racine de l'dépôt
Exporter une certaine version du fichier dans un package compressé (hors .git)
git archive -o release.zip v1.2.0
git archive HEAD src/ | tar -x -C /tmp/out
Enchaînez quelques commandes dans une recette « faire une chose » ; dépliez-la pour copier l’ensemble.
Annuler le dernier commit mais conserver les modifications
La commit a été trop tôt / la description a été mal rédigée / Je souhaite la diviser en deux commits (et elle n'a pas encore été poussée)
git reset --soft HEAD~1Soumettre et retirer, les changements sont toujours dans la zone de préparation
git statusConfirmez que les fichiers sont tous dans « Modifications à soumettre »
git commit -m "nouvelle description"
Annuler un commit déjà poussé
D’autres l’ont peut-être déjà pris, l’histoire ne peut pas être réécrite.
git revert <commit>Générer un commit inversé
git push
Revenir à une version (locale)Danger
L'expérience locale est ratée et je veux revenir complètement à un certain engagement
git log --onelineTrouver l'ID de commit cible
git stash -u(Facultatif) Réduisez d'abord les modifications que vous souhaitez conserver
git reset --hard <commit>
Soumis sur main et souhaitez passer à une nouvelle brancheAttention
J'ai oublié d'ouvrir une branche et je l'ai soumise N fois.
git branch feature/xCréer une branche à l'emplacement actuel ("enregistrer" ces commits)
git reset --hard origin/mainle principal retourne dans un état éloigné
git switch feature/x
Combiner plusieurs commits fragmentaires en une seuleAttention
Organiser l'historique avant d'ouvrir un PR (la branche n'est pas utilisée par d'autres)
git rebase -i HEAD~4Remplacez le choix dans les lignes suivantes par squash ou fixup
git push --force-with-leaseObligatoire uniquement si la branche a été poussée
Laissez la branche de fonction suivre les dernières avancées de main
main a un nouveau commit, et la branche de fonctionnalités doit continuer par-dessus
git fetch origin
git switch feature/x
git rebase origin/mainou git merge origin/main (conserver les commits de fusion)
Renommer le maître en principal (y compris à distance)Attention
Unifier le nom de la branche par défaut
git branch -m master main
git push -u origin main
git push origin --delete masterTout d’abord, coupez la branche par défaut en main sur la plateforme d’hébergement
Récupérer les branches supprimées accidentellement
Je l'ai trouvé utile après git branch -D
git reflogRechercher l'identifiant du dernier commit de la branche (tel que "commit: xxx")
git branch <name> <commit-id>
Clé/fichier volumineux soumis par erreurDanger
.env ou des centaines de Mo de fichiers entrés dans l'historique
git rm --cached .env && echo ".env" >> .gitignoreSi seul le dernier commit est effectué : alors git commit --amend
git filter-repo --path .env --invert-pathsDéjà profondément ancré dans l'histoire : réécrivez tout l'historique avec git-filter-repo (doit être installé séparément)
git push --force-with-lease --allTous les collaborateurs doivent être reclonés ; les clés divulguées doivent être invalidées et rééditées de toute façon
Apporter un correctif à la branche release
Les bugs corrigés sur main seront également déplacés vers la version/1.2
git switch release/1.2
git cherry-pick <commit>
git push
Processus de gestion standard des conflits de fusion
git merge / pull report CONFLIT
git statusVoir quels documents ont été « modifiés par les deux parties »
code <file>Traiter les balises <<<<<<< ======= >>>>>>> dans l'éditeur, en conservant le contenu correct
git add <file>Ajoutez-en un après que chacun soit corrigé
git commitLors du rebase, git rebase --continue
Il existe un projet existant localement, transférez-le vers le nouvel dépôt distant vide
J'ai d'abord écrit le code localement, puis j'ai construit un dépôt sur GitHub.
git init -b main && git add -A && git commit -m "init"
Schéma des opérations : ce que chaque commande fait au graphe de commits
Les points sont des commits et les flèches pointent vers le commit parent ; une étiquette verte indique une branche, une violette la branche où se trouve HEAD ; un point gris n’est plus référencé par aucune branche (récupérable via le reflog) et un point plein est un commit créé par l’opération en cours.
Commit : ajouter un nœud à la pointe de la branche courante
git add . && git commit -m "…"
Chaque commit retient son commit parent ; une branche n’est qu’un pointeur mobile vers un commit, donc après un commit, main et HEAD avancent ensemble.
Créer une branche : juste un pointeur, aucun fichier copié
git switch -c feature
La nouvelle branche et main pointent vers le même commit, donc la création est instantanée ; ensuite, les commits sur feature ne font avancer que feature.
Fusion en avance rapide : déplacer directement le pointeur quand main n’a aucun commit propre
git switch main && git merge feature
Aucun nouveau commit n’est créé et l’historique reste une ligne droite. Pour garder la trace qu’une branche a existé, utilisez --no-ff.
Fusion à trois points : créer un commit de fusion quand les deux côtés ont de nouveaux commits
git merge feature
Git trouve l’ancêtre commun b2, combine les modifications de chaque côté par rapport à b2 et crée m6 avec deux commits parents. Un conflit n’apparaît que si la même zone a été modifiée différemment.
Rebase : rejouer les commits de feature par-dessus main
git switch feature && git rebase main
L’historique devient une ligne droite, mais c3 et d4 sont remplacés par de nouveaux commits c3′ et d4′ (les id changent). Ne faites pas de rebase sur une branche déjà poussée, sinon l’historique des autres divergera du vôtre.
reset : reculer le pointeur de branche (les commits deviennent orphelins pour l’instant)
git reset --hard HEAD~1
--soft ne déplace que le pointeur ; --mixed vide en plus la zone de préparation ; --hard rétablit aussi l’arbre de travail. Le commit orphelin c3 reste récupérable via le reflog (conservé au moins 30 jours par défaut).
revert : annuler par un commit inverse, sans réécrire l’historique
git revert HEAD
c3 reste dans l’historique et le nouveau commit r4 contient l’inverse des modifications de c3. Pour annuler un commit déjà poussé, utilisez revert plutôt que reset.
cherry-pick : appliquer un seul commit
git cherry-pick x7
Rejoue sur main les modifications que x7 a introduites par rapport à son parent, ce qui donne x7′ au contenu identique mais à l’id différent. Idéal pour porter un correctif isolé vers une branche de publication.
Terminal d’entraînement : tapez les commandes dans le navigateur
Un simulateur Git entièrement en mémoire (pas le vrai Git, aucune connexion réseau) : il prend en charge les sous-commandes courantes init / add / commit / branch / switch / merge / rebase / reset / revert / stash / tag / remote / push / pull, et le graphe à droite se met à jour en temps réel. 10 niveaux, de la première validation à la résolution d’un conflit de fusion. Pour les commandes Linux, l’entraînement se trouve dansAide-mémoire des commandes Linux.
git-lab — bashTab pour compléter · ↑↓ historique · Ctrl+L pour effacer
Terminal d’entraînement Git de Toolun : un Git en mémoire, à manipuler librement sans rien casser.
Tapez git help pour voir les sous-commandes prises en charge ; choisissez un niveau à droite et suivez l’objectif : le graphe de commits se met à jour à chaque commande.