Configuration
git config [--system | --global | --local] <clé> [<valeur>]
Permet de lire et d'écrire les variables de configuration qui contrôlent tous les aspects du comportement de Git. Les variables peuvent être stockées à trois niveaux distincts et hiérarchiques : système, utilisateur global et dépôt local. Chaque niveau surcharge le précédent. Les variables définies sans niveau explicite sont écrites dans le fichier local .git/config.
OptionEffet
--systemOpère sur le fichier de configuration système (/etc/gitconfig), applicable à tous les utilisateurs de la machine.
--globalOpère sur ~/.gitconfig : s'applique à tous les dépôts de l'utilisateur courant.
--localOpère sur .git/config du dépôt courant (comportement par défaut).
--listAffiche l'ensemble des variables de configuration lues depuis tous les niveaux actifs.
--show-originIndique en regard de chaque valeur le fichier de configuration d'où elle provient.
-f <fichier>Opère sur un fichier de configuration arbitraire.
--unsetSupprime la variable spécifiée du fichier de configuration ciblé.
Les variables usuelles incluent user.name, user.email, core.editor, init.defaultBranch, pull.rebase et credential.helper.
git help <commande>
Affiche la page de manuel (man page) de la commande Git spécifiée. Disponible hors connexion. Chaque commande Git accepte aussi l'option --help pour obtenir le même résultat, et l'option -h pour un résumé court des options disponibles.
Initialisation & clonage
git init [--bare] [--shared] [répertoire]
Crée un nouveau dépôt Git en initialisant le sous-répertoire .git dans le répertoire courant ou dans le répertoire spécifié. Ce répertoire contient tous les objets, références et métadonnées du dépôt. Si aucun fichier n'est présent, la copie de travail est vide et aucun commit n'existe encore.
OptionEffet
--bareCrée un dépôt nu sans copie de travail. Utilisé pour les dépôts serveur destinés à être partagés.
--sharedActive les permissions d'écriture de groupe sur le dépôt. Utile pour les dépôts partagés en accès SSH multi-utilisateurs.
git clone <url> [<répertoire-cible>]
Récupère une copie complète d'un dépôt Git existant, y compris l'intégralité de son historique. Le dépôt distant est automatiquement enregistré sous le nom court origin. Une branche de suivi locale est créée pour chaque branche distante, et la branche principale est extraite dans la copie de travail. Les protocoles supportés incluent https://, ssh://, git:// et les chemins locaux.
OptionEffet
--bareClone le dépôt sous forme nue, sans copie de travail.
--depth <n>Clone superficiel : ne récupère que les n derniers commits (historique tronqué).
-o <nom>Utilise nom à la place d'origin pour désigner le dépôt distant.
-b <branche>Extrait la branche spécifiée plutôt que la branche par défaut.
Instantané de base
git add <fichier|répertoire|patron> ...
Place des modifications dans la zone d'index (staging area) pour les inclure dans le prochain commit. Son effet s'approche de « ajouter ce contenu pour la prochaine validation » plutôt que d'un simple ajout au projet. Elle sert à la fois à placer de nouveaux fichiers sous suivi de version, à indexer des fichiers modifiés, et à marquer des conflits de fusion comme résolus. Si un répertoire est spécifié, la commande indexe récursivement tous les fichiers qu'il contient.
OptionEffet
-A / --allIndexe toutes les modifications : fichiers nouveaux, modifiés et supprimés dans l'ensemble de l'arbre de travail.
-p / --patchMode interactif hunk par hunk : permet de sélectionner partiellement les modifications d'un fichier à indexer.
-i / --interactiveLance le mode d'indexation interactive en menu texte.
-u / --updateIndexe uniquement les fichiers déjà suivis (modifiés ou supprimés), sans ajouter de nouveaux fichiers.
-n / --dry-runSimule l'opération sans modifier l'index.
-f / --forceAutorise l'ajout de fichiers normalement ignorés par les règles .gitignore.
git status [-s | --short] [-b]
Affiche l'état de la copie de travail et de la zone d'index par rapport au dernier commit. Identifie les fichiers modifiés, indexés ou non suivis, et rappelle les commandes permettant d'agir sur chaque catégorie. Indique également la branche courante et son avance ou son retard par rapport à la branche distante suivie.
OptionEffet
-s / --shortAffiche une sortie compacte sur une colonne par fichier : lettres de code d'état à gauche.
-b / --branchInclut les informations de branche même en mode court.
git diff [--staged] [<commit>] [--] [<chemin>...]
Affiche les différences ligne par ligne (patch) entre différents états du dépôt. Sans argument, compare la copie de travail avec l'index (modifications non indexées). Avec --staged ou --cached, compare l'index avec le dernier commit (modifications indexées qui feront partie du prochain commit). Peut aussi comparer deux commits arbitraires ou un commit avec la copie de travail.
OptionEffet
--staged / --cachedCompare l'index au dernier commit : montre ce qui sera validé.
--checkIdentifie et liste les erreurs d'espacement (espaces en fin de ligne, mélange tabs/espaces).
--statRésumé statistique : fichiers modifiés et nombre de lignes ajoutées ou supprimées.
-wIgnore toutes les modifications d'espaces.
git difftool lance un outil graphique externe (Araxis, vimdiff, etc.) pour visualiser les mêmes différences.
git commit [-m <message>] [-a] [--amend] [-v]
Enregistre l'état actuel de l'index sous forme d'un nouvel objet commit dans le dépôt local. Chaque commit contient un instantané du contenu indexé, les métadonnées de l'auteur et du validateur, la date, le message de validation, et un pointeur vers le ou les commits parents. Sans option de message, ouvre l'éditeur configuré pour la saisie du message.
OptionEffet
-m <message>Spécifie le message de validation directement en ligne de commande.
-aIndexe automatiquement tous les fichiers déjà suivis avant de valider, sans passer par git add.
--amendRemplace le commit le plus récent par un nouveau commit incorporant l'index courant et/ou un message modifié. Le commit original est écarté.
-vInclut le diff complet dans le commentaire du message affiché dans l'éditeur.
--amend réécrit l'historique. Ne pas l'utiliser sur des commits déjà poussés vers un dépôt partagé.
git rm [-f] [--cached] <fichier>...
Supprime des fichiers de l'index et de la copie de travail en une seule opération, en enregistrant la suppression pour le prochain commit. Contrairement à une simple suppression système, la suppression est indexée et sera incluse dans la prochaine validation.
OptionEffet
-f / --forceForce la suppression même si le fichier a été modifié ou indexé depuis le dernier commit.
--cachedRetire le fichier de l'index uniquement, sans le supprimer de la copie de travail. Utile pour arrêter le suivi d'un fichier accidentellement indexé.
git mv <source> <destination>
Renomme ou déplace un fichier et indexe cette modification pour le prochain commit. Équivalent à exécuter mv, git rm et git add en séquence. Git détecte de toute façon les renommages de façon implicite ; cette commande simplifie simplement l'opération en une étape.
Historique
git log [-p] [--stat] [--pretty=<format>] [--graph] [--oneline] [-n] [--since] [--author] [-S] [--] [<chemin>]
Affiche l'historique des commits du dépôt en ordre chronologique inverse. Pour chaque commit, indique la somme de contrôle SHA-1, le nom et l'e-mail de l'auteur, la date et le message de validation. Offre de très nombreuses options de filtrage et de formatage de sortie.
OptionEffet
-pAffiche le diff complet (patch) de chaque commit.
--statAffiche des statistiques résumées (fichiers modifiés, insertions, suppressions) sous chaque commit.
--shortstatAffiche uniquement la ligne de résumé des statistiques.
--name-onlyAffiche la liste des noms de fichiers modifiés après les informations de chaque commit.
--name-statusAffiche les noms de fichiers avec leur code de modification (A, M, D…).
--abbrev-commitN'affiche que les premiers caractères du SHA-1 au lieu de la somme complète.
--onelineAffiche chaque commit sur une seule ligne (SHA abrégé + titre du message).
--graphAjoute un graphe ASCII des branches et fusions en vis-à-vis de l'historique.
--decorateAffiche les étiquettes de branches et de tags pointant vers chaque commit.
--pretty=format:"…"Format de sortie personnalisé via des spécificateurs (%H, %an, %s, %ar, etc.).
-<n>Limite l'affichage aux n commits les plus récents.
--since / --afterFiltre les commits postérieurs à la date spécifiée.
--until / --beforeFiltre les commits antérieurs à la date spécifiée.
--authorFiltre sur le nom de l'auteur.
--grepFiltre sur le contenu du message de validation.
-S <chaîne>Filtre les commits dont les modifications ajoutent ou retirent la chaîne spécifiée dans le code.
--no-mergesExclut les commits de fusion de la sortie.
--allAffiche l'historique de toutes les branches, pas seulement de la branche courante.
git show [<objet>]
Affiche les informations détaillées d'un objet Git : commit (métadonnées et diff), tag annoté (informations du créateur et du commit associé), arbre ou blob. Sans argument, montre le dernier commit de la branche courante.
Annulation
git restore [--staged] <fichier>...
Introduit à partir de Git 2.25, commande dédiée à la réinitialisation des fichiers. Sans option, réinitialise un fichier dans la copie de travail à son état du dernier commit, en écrasant les modifications locales non indexées. Avec --staged, désindexe un fichier (le retire de la zone d'index) sans toucher à la copie de travail.
OptionEffet
--stagedAgit sur l'index : désindexe le fichier spécifié sans modifier la copie de travail.
--source <arbre>Restaure le fichier depuis l'arbre Git spécifié plutôt que depuis le dernier commit.
Sans --staged, toutes les modifications locales non validées du fichier sont définitivement perdues.
git reset [--soft | --mixed | --hard] [<commit>] [--] [<fichier>...]
Commande polyvalente permettant de déplacer le pointeur HEAD et/ou de modifier l'état de l'index et de la copie de travail. Avec un chemin de fichier, désindexe le fichier spécifié (équivalent à git restore --staged). Avec un commit comme cible, repositionne HEAD et agit selon le mode choisi sur l'index et la copie de travail. Elle est le fondement des opérations d'annulation et de réécriture d'historique dans Git.
ModeEffet sur HEAD
--softDéplace HEAD vers le commit cible. L'index et la copie de travail restent inchangés. Les modifications apparaissent comme « à valider ».
--mixed (défaut)Déplace HEAD et réinitialise l'index. La copie de travail reste inchangée. Les modifications apparaissent comme non indexées.
--hardDéplace HEAD, réinitialise l'index ET écrase la copie de travail. Toutes les modifications locales sont définitivement perdues.
L'option --hard est destructive et irréversible sur les données non commitées.
git revert <commit>
Crée un nouveau commit qui inverse exactement les modifications introduites par le commit spécifié. Contrairement à git reset, ne réécrit pas l'historique : le commit annulé reste dans le graphe. Méthode sûre pour annuler des commits déjà partagés sur un dépôt public.
Branches
git branch [-v] [-a] [--merged | --no-merged] [--move | -d | -D] [<nom>]
Commande de gestion des branches locales. Sans argument, liste les branches locales en marquant la branche courante d'un astérisque. Une branche Git est simplement un pointeur léger sur un commit ; les créer et les supprimer ne coûte quasiment rien.
OptionEffet
-vAffiche le dernier commit de chaque branche avec son message.
-vvAffiche en plus la branche distante suivie et l'état d'avance/retard.
-aListe également les branches distantes (préfixées remotes/).
-d <branche>Supprime la branche si elle a été entièrement fusionnée dans la branche courante.
-D <branche>Force la suppression de la branche même si des commits n'ont pas été fusionnés.
--mergedFiltre la liste sur les branches dont le travail est déjà intégré dans la branche courante.
--no-mergedFiltre la liste sur les branches contenant du travail non encore fusionné.
--move / -mRenomme la branche localement.
-u <distant>/<branche>Associe la branche locale à une branche distante (branche de suivi / upstream).
git checkout [-b <nouvelle-branche>] [<branche> | <commit>] [-- <fichier>]
Commande historique à double usage : bascule sur une branche existante (déplace HEAD et met à jour la copie de travail) ou restaure des fichiers de la copie de travail. Depuis Git 2.23, ses deux fonctions sont mieux séparées par git switch et git restore. Lors du basculement de branche, Git réinitialise la copie de travail à l'état du dernier commit de la branche cible.
OptionEffet
-b <nom>Crée une nouvelle branche et bascule immédiatement dessus en une seule opération.
--trackCrée une branche locale qui suit automatiquement une branche distante spécifiée.
-- <fichier>Restaure le fichier dans la copie de travail à son état dans l'index ou le commit courant, écrasant les modifications locales.
git switch [-c <nouvelle-branche>] [<branche>] [-]
Introduit dans Git 2.23 pour séparer clairement la fonction de basculement de branche de la restauration de fichiers. Permet de changer de branche, d'en créer une nouvelle et d'y basculer, ou de revenir à la branche précédemment extraite.
OptionEffet
-c <nom> / --createCrée une nouvelle branche et bascule dessus.
- (tiret)Retourne à la branche précédemment extraite.
git merge [--no-ff] [--squash] <branche>
Intègre l'historique et les modifications d'une branche dans la branche courante. Si la branche cible est un ancêtre direct de la branche à fusionner, Git effectue une avance rapide (fast-forward) en déplaçant simplement le pointeur. Sinon, Git réalise une fusion à trois sources en créant un nouveau commit de fusion avec deux parents. En cas de conflit, la fusion est interrompue et les fichiers conflictuels sont marqués pour résolution manuelle.
OptionEffet
--no-ffCrée toujours un commit de fusion, même quand une avance rapide serait possible.
--squashCondense tous les commits de la branche fusionnée en un seul ensemble de modifications indexées, sans créer de commit de fusion automatique.
--abortInterrompt une fusion en cours et restaure l'état précédant la tentative de fusion.
git mergetool [--tool=<outil>]
Lance un outil graphique de résolution de conflits de fusion. Git détecte et propose les outils disponibles sur le système (opendiff, kdiff3, vimdiff, emerge, etc.). Après résolution de chaque conflit dans l'outil, le fichier est marqué comme résolu dans l'index.
OptionEffet
--tool=<nom>Force l'utilisation de l'outil spécifié plutôt que celui par défaut.
--tool-helpAffiche la liste des outils de fusion disponibles sur le système.
git rebase [-i] [--onto <newbase>] [<upstream>] [<branche>]
Rejoue les commits d'une branche sur une nouvelle base, produisant un historique linéaire. Identifie l'ancêtre commun entre la branche courante et la cible, extrait les diffs de chaque commit, réinitialise la branche sur la cible, puis réapplique chaque diff dans l'ordre. Contrairement à la fusion, ne crée pas de commit de fusion ; l'historique résultant est plus lisible mais réécrit les identifiants SHA-1.
OptionEffet
-i / --interactiveMode interactif : permet de réordonner, condenser (squash), reformuler ou supprimer des commits avant de les rejouer.
--onto <newbase>Rejoue les commits sur une base arbitraire différente de l'upstream, permettant de transplanter une branche sur une autre.
--abortInterrompt un rebasage en cours et restaure l'état original.
--continuePoursuit le rebasage après résolution d'un conflit.
--skipIgnore le commit courant en conflit et passe au suivant.
Ne jamais rebaser des commits déjà poussés sur un dépôt public. Le rebasage réécrit les SHA-1 ; cela oblige les collaborateurs à re-fusionner leur travail.
Dépôts distants
git remote [-v] [add | remove | rename | show | prune] ...
Gère les références vers les dépôts distants (noms courts et URL associées). Sans argument, liste les noms courts des dépôts distants enregistrés. Les dépôts distants sont des versions de votre projet hébergées ailleurs (internet, réseau local ou même chemin local).
Sous-commandeEffet
-vAffiche les URL de fetch et de push de chaque dépôt distant enregistré.
add <nom> <url>Enregistre un nouveau dépôt distant sous le nom court spécifié.
remove <nom>Supprime la référence au dépôt distant, ainsi que toutes les branches de suivi et configurations associées.
rename <ancien> <nouveau>Renomme le dépôt distant et met à jour les noms de toutes les branches de suivi correspondantes.
show <nom>Affiche des informations détaillées sur le dépôt distant : URLs, branches suivies, configurations de push et pull.
prune <nom>Supprime les références distantes locales qui n'existent plus sur le serveur distant.
git fetch [<distant>] [--all] [--prune]
Récupère depuis le dépôt distant toutes les nouvelles données (commits, branches, tags) qui ne sont pas encore présentes localement. Met à jour uniquement les branches de suivi à distance (ex. origin/master), sans toucher aux branches locales ni à la copie de travail. La fusion des données distantes dans le travail local doit être effectuée manuellement avec git merge.
OptionEffet
--allRécupère depuis tous les dépôts distants configurés en une seule opération.
--pruneSupprime les branches de suivi locales qui n'ont plus de correspondance sur le distant.
git pull [--rebase] [<distant>] [<branche>]
Combine git fetch suivi immédiatement de git merge (ou git rebase selon la configuration). Récupère les modifications distantes depuis la branche de suivi configurée et les intègre dans la branche locale courante. Si la variable pull.rebase est définie à true, effectue un rebasage au lieu d'une fusion.
OptionEffet
--rebaseRebase la branche locale sur la branche distante plutôt que de la fusionner.
--no-rebaseForce la fusion même si pull.rebase est configuré à true.
git push [<distant>] [<branche-locale>[:<branche-distante>]] [--tags] [--delete] [--force] [-u]
Transfère les commits de la branche locale vers le dépôt distant spécifié. La poussée est refusée si l'historique distant a divergé (quelqu'un a poussé entre-temps) : il faut d'abord récupérer et fusionner les modifications distantes. Les étiquettes ne sont pas poussées automatiquement ; elles doivent être spécifiées explicitement.
OptionEffet
-u / --set-upstreamEnregistre la branche distante comme upstream de la branche locale, simplifiant les poussées et tirages ultérieurs.
--tagsPousse toutes les étiquettes locales (légères et annotées) non encore présentes sur le distant.
--follow-tagsPousse uniquement les étiquettes annotées associées aux commits poussés.
--delete <branche>Supprime la branche ou l'étiquette spécifiée sur le dépôt distant.
--force / -fForce la poussée même si elle n'est pas en avance rapide (réécrit l'historique distant). Dangereux en environnement partagé.
<local>:<distant>Refspec : pousse la branche locale vers une branche distante de nom différent.
--force écrase l'historique distant. À n'utiliser qu'avec certitude absolue dans un contexte maîtrisé.
Étiquettes (Tags)
git tag [-a] [-m <message>] [-d] [-l <motif>] <nom> [<commit>]
Crée, liste ou supprime des étiquettes (tags) pour marquer des points importants de l'historique (versions publiées, jalons). Git distingue deux types d'étiquettes : légères (simple pointeur sur un commit) et annotées (objets à part entière avec métadonnées, message et possibilité de signature GPG). Les étiquettes annotées sont recommandées pour les publications officielles. Les étiquettes ne sont pas poussées automatiquement avec git push.
OptionEffet
-aCrée une étiquette annotée, stockée comme objet Git avec son propre SHA-1.
-m <message>Spécifie le message de l'étiquette annotée directement en ligne de commande.
-sCrée une étiquette signée avec GPG.
-d <nom>Supprime l'étiquette localement (ne supprime pas sur les dépôts distants).
-l <motif>Filtre la liste des étiquettes selon un motif glob (obligatoire si un motif contient des jokers).
<commit>Appose l'étiquette sur un commit spécifique plutôt que sur HEAD (étiquetage a posteriori).
Remisage (Stash)
git stash [push | pop | list | apply | drop | show | branch]
Sauvegarde temporairement les modifications de la copie de travail et de l'index dans une pile, sans créer de commit. La copie de travail est ramenée à l'état du dernier commit, permettant de changer de contexte sans valider un travail inachevé. Les remisages peuvent être réappliqués ultérieurement, y compris sur d'autres branches.
Sous-commandeEffet
push / (défaut)Empile les modifications courantes (copie de travail et index) dans la pile de remisage.
popRéapplique le remisage le plus récent et le supprime de la pile.
apply [stash@{n}]Réapplique un remisage sans le supprimer de la pile.
listAffiche la liste de tous les remisages en pile avec leur description.
drop [stash@{n}]Supprime un remisage spécifique de la pile sans l'appliquer.
show [stash@{n}]Affiche le diff du remisage spécifié.
branch <branche>Crée une nouvelle branche à partir du commit où le remisage a été créé, puis applique le remisage dessus.
Recherche et débogage
git grep [-n] [-c] [-p] <motif> [<arbre>]
Recherche un motif (expression régulière ou littéral) dans les fichiers du dépôt, avec la possibilité de cibler un commit ou une arborescence particulière plutôt que la copie de travail. Plus rapide que grep classique sur les grands dépôts car il n'examine que les fichiers suivis.
OptionEffet
-nAffiche les numéros de ligne des correspondances.
-cAffiche uniquement le nombre de correspondances par fichier.
-pAffiche le nom de la fonction contenant chaque correspondance.
--and / --orCombine plusieurs motifs avec des opérateurs logiques.
git bisect [start | good | bad | reset | run <script>]
Outil de recherche binaire dans l'historique pour localiser le commit qui a introduit un bug. Git navigue automatiquement dans l'historique par dichotomie, réduisant la recherche à O(log n) commits à tester. Chaque commit est marqué comme bon ou mauvais jusqu'à isoler le premier commit défectueux. Peut être entièrement automatisé avec un script de test.
Sous-commandeEffet
startDémarre une session de recherche binaire.
bad [<commit>]Marque le commit courant (ou spécifié) comme défectueux.
good [<commit>]Marque le commit courant (ou spécifié) comme correct.
resetTermine la session et revient à la branche initiale.
run <script>Exécute automatiquement le script pour chaque commit testé. Exit 0 = bon, exit 1 = mauvais.
git blame [-L <début>,<fin>] <fichier>
Affiche chaque ligne d'un fichier annoté du commit qui l'a introduite en dernier, ainsi que l'auteur et la date. Permet d'identifier rapidement qui a modifié une ligne de code particulière et dans quel commit.
OptionEffet
-L <début>,<fin>Restreint l'annotation aux lignes spécifiées.
-CDétecte les lignes copiées depuis d'autres fichiers.
--show-statsAffiche des statistiques supplémentaires à la fin.
Réécriture de l'historique
git filter-branch [--tree-filter | --env-filter | --commit-filter | --msg-filter] <filtres> [<rev-list>]
Réécrit l'intégralité de l'historique en appliquant des filtres scriptés à chaque commit. Permet de supprimer un fichier de tout l'historique, de modifier les métadonnées d'auteur, de changer des messages de commit en masse, ou de découper un sous-répertoire en dépôt indépendant. Opération lente et irréversible ; préférer l'outil git-filter-repo pour les versions récentes.
Réécrit tous les SHA-1 de l'historique. À n'utiliser qu'avant de publier un dépôt ou en coordination totale avec tous les contributeurs.
git cherry-pick <commit>...
Réapplique les modifications introduites par un ou plusieurs commits spécifiques sur la branche courante, en créant de nouveaux commits équivalents. Utile pour importer une correction de bug d'une branche vers une autre sans fusionner l'intégralité de la branche source.
OptionEffet
-n / --no-commitApplique les modifications dans la copie de travail et l'index sans créer de commit automatiquement.
-xAjoute dans le message de commit une référence au commit source d'origine.
git rerere [clear | forget | diff | status | remaining | gc]
« Reuse recorded resolution » : mémorise les résolutions de conflits de fusion déjà effectuées et les réapplique automatiquement lorsque le même conflit se reproduit. Particulièrement utile sur les branches thématiques qui sont régulièrement rebasées sur master. Doit être activé avec git config rerere.enabled true.
Sous-modules
git submodule [add | init | update | status | foreach | sync]
Gère les sous-modules : des dépôts Git imbriqués dans un dépôt parent, enregistrés à un commit spécifique. Permet d'inclure et de gérer des dépendances externes (bibliothèques, outils) tout en maintenant leurs historiques séparés. Le dépôt parent enregistre uniquement l'URL et le SHA-1 du commit utilisé pour chaque sous-module.
Sous-commandeEffet
add <url> [chemin]Ajoute un nouveau sous-module : clone le dépôt et enregistre son référencement dans .gitmodules.
initInitialise la configuration locale des sous-modules déclarés dans .gitmodules après un clone.
update [--remote] [--recursive]Extrait le commit enregistré pour chaque sous-module. Avec --remote, récupère le dernier commit de la branche de suivi.
status [--recursive]Affiche l'état de chaque sous-module (commit extrait vs commit enregistré).
foreach <commande>Exécute une commande shell dans chaque sous-module.
syncMet à jour les URLs des dépôts distants des sous-modules depuis .gitmodules.
Administration
git gc [--aggressive] [--prune=<date>]
Exécute les tâches de maintenance du dépôt : compresse les objets isolés en fichiers groupés (packfiles), supprime les objets inaccessibles (orphelins, réfs supprimées), et optimise les structures internes de Git pour de meilleures performances. Git peut lancer cette commande automatiquement en arrière-plan.
OptionEffet
--aggressiveOptimisation plus poussée mais plus longue : réécrit les packfiles avec une meilleure compression.
--prune=<date>Supprime les objets inaccessibles plus anciens que la date spécifiée (défaut : 2 semaines).
git fsck [--full] [--lost-found]
Vérifie l'intégrité de la base de données d'objets Git et détecte les données corrompues ou les objets orphelins (dangling objects). Les objets orphelins sont des commits, arbres ou blobs non référencés par aucune branche ou étiquette ; ils peuvent représenter du travail perdu récupérable.
OptionEffet
--fullVérifie également les packfiles, pas seulement les objets isolés.
--lost-foundÉcrit les objets orphelins trouvés dans .git/lost-found/.
--danglingAffiche les objets qui existent mais ne sont référencés par rien (défaut : activé).
git bundle [create | verify | list-heads | unbundle]
Empaquette des objets Git et des références dans un fichier binaire portable (bundle), permettant de transférer de l'historique Git via des médias sans connexion réseau (clé USB, pièce jointe courriel). Un bundle peut être utilisé comme un dépôt distant pour git fetch ou git clone.
Sous-commandeEffet
create <fichier> <rev-list>Crée un bundle contenant les objets et références spécifiés.
verify <fichier>Vérifie qu'un bundle est valide et que les prérequis sont satisfaits localement.
list-heads <fichier>Liste les références contenues dans le bundle.
unbundle <fichier>Importe les objets du bundle dans le dépôt courant.
git replace <objet> <remplacement>
Crée une référence de remplacement qui fait en sorte que Git traite un objet comme si c'était un autre, sans réécrire l'historique. Utile pour greffer des historiques distincts ou corriger des erreurs dans des commits anciens sans modifier les SHA-1. Les remplacements sont stockés dans refs/replace/.
Commandes de plomberie (bas niveau)
git ls-tree [-r] <arbre>
Affiche le contenu d'un objet arbre Git (liste des fichiers et sous-répertoires avec leurs modes, types et SHA-1 associés). Commande de plomberie utilisée pour inspecter directement les objets internes du dépôt.
git cat-file [-t | -s | -p] <objet>
Affiche le contenu, le type ou la taille d'un objet Git (blob, arbre, commit, tag) identifié par son SHA-1 ou une référence symbolique. Commande fondamentale pour inspecter les objets internes du dépôt.
OptionEffet
-tAffiche le type de l'objet (blob, tree, commit, tag).
-sAffiche la taille de l'objet en octets.
-pAffiche le contenu de l'objet dans un format lisible adapté à son type.
git hash-object [-w] [-t <type>] <fichier>
Calcule le SHA-1 d'un fichier selon le format d'objet Git et optionnellement le stocke dans la base d'objets. Commande de plomberie illustrant la manière dont Git génère les identifiants de ses objets.
OptionEffet
-wÉcrit l'objet dans la base de données du dépôt plutôt que de simplement afficher son SHA-1.
-t <type>Spécifie le type de l'objet à créer (blob, tree, commit).
git write-tree
Crée un objet arbre dans la base de données Git à partir du contenu actuel de l'index et retourne son SHA-1. Commande de plomberie utilisée dans les scripts bas niveau pour construire des commits manuellement.
git update-ref <réf> <valeur>
Met à jour une référence Git (branche, tag ou toute refs/) pour pointer vers le SHA-1 spécifié. Méthode de plomberie sûre pour manipuler les références, préférable à l'édition directe des fichiers dans .git/refs/.
git ls-remote [<distant>]
Affiche la liste complète des références (branches, tags, HEAD) d'un dépôt distant avec les SHA-1 correspondants, sans télécharger aucun objet. Commande de plomberie pour interroger l'état d'un dépôt distant sans fetch.