// Git Toolbox
Inspecteur .git
Le dossier .git, c'est le cerveau de ton dépôt. Voici à quoi sert chaque partie, ce que tu peux toucher, et ce qu'il raconte sur ton dépôt.
Contenu de .git
HEADLà où tu es : en général « ref: refs/heads/main ». Un hash brut veut dire HEAD détachée.
DestructriceN'y touche pasRegarder dedans
Sans risque$ cat .git/HEADconfigLes réglages de ce dépôt : remotes, suivi des branches, options locales. Modifie-le avec git config plutôt qu'à la main.
PrudenceAvec précautionRegarder dedans
Sans risque$ git config --local --listdescriptionUtilisé seulement par GitWeb. Tu peux l'ignorer.
Sans risqueTu peux y toucherindexLa zone de staging : la photo exacte de ton prochain commit (fichier binaire).
DestructriceN'y touche pasRegarder dedans
Sans risque$ git ls-files --stageobjects/La base de données : chaque version de chaque fichier (blobs), dossier (trees), commit et tag annoté, compressés et nommés par leur hash.
DestructriceN'y touche pasRegarder dedans
Sans risque$ git count-objects -vHpack/Les objets regroupés (.pack + .idx), avec des deltas entre versions. Créés par clone, fetch et git gc.
DestructriceN'y touche pasRegarder dedans
Sans risque$ git verify-pack -v .git/objects/pack/*.idx | sort -k3 -n | tail -5info/Infos annexes de la base d'objets (alternates, liste des packs).
Sans risqueTu peux y touchera1//Objets en vrac : les 2 premiers caractères du hash en dossier, les 38 autres en nom de fichier.
DestructriceN'y touche pasRegarder dedans
Sans risque$ git cat-file -p <hash>
refs/Branches, tags et branches distantes : de petits fichiers texte qui contiennent un hash de commit.
PrudenceAvec précautionRegarder dedans
Sans risque$ git show-refheads/Tes branches locales. refs/heads/main contient le hash du dernier commit de main.
PrudenceAvec précautionRegarder dedans
Sans risque$ git branch -vtags/Tes tags (v1.0.0…).
PrudenceAvec précautionRegarder dedans
Sans risque$ git tag -nremotes/Le dernier état connu des branches distantes (origin/main…), mis à jour par fetch.
Sans risqueTu peux y toucherRegarder dedans
Sans risque$ git branch -rstashTes stashs.
PrudenceAvec précautionRegarder dedans
Sans risque$ git stash list
packed-refsBeaucoup de refs dans un seul fichier, pour la vitesse. Une branche peut être ici au lieu de refs/heads/.
PrudenceAvec précautionRegarder dedans
Sans risque$ cat .git/packed-refslogs/Le reflog : chaque position qu'ont eue HEAD et chaque branche. C'est ce qui te sauve après un mauvais reset.
PrudenceAvec précautionEn savoir plus →Regarder dedans
Sans risque$ git refloghooks/Des scripts lancés par Git à des moments clés (pre-commit, pre-push…). Les fichiers .sample sont des exemples inactifs.
Sans risqueTu peux y toucherEn savoir plus →info/info/exclude : un .gitignore personnel qui n'est jamais commité.
Sans risqueTu peux y toucherRegarder dedans
Sans risque$ cat .git/info/excludeCOMMIT_EDITMSGLe message de ton dernier commit, tel que tapé dans l'éditeur.
Sans risqueTu peux y toucherFETCH_HEADtemporaireCe que le dernier fetch a ramené.
Sans risqueTu peux y toucherRegarder dedans
Sans risque$ cat .git/FETCH_HEADORIG_HEADtemporaireOù était HEAD avant la dernière opération risquée (merge, rebase, reset).
Sans risqueTu peux y toucherRegarder dedans
Sans risque$ git log -1 ORIG_HEADMERGE_HEADtemporaireMERGE_MSGtemporaireLe message préparé du commit de merge.
Sans risqueTu peux y toucherrebase-merge/temporairerebase-apply/temporaireL'état d'un git am ou d'un rebase à l'ancienne.
DestructriceN'y touche pasCHERRY_PICK_HEADtemporaireLe commit en train d'être cherry-pické.
DestructriceN'y touche pasREVERT_HEADtemporaireLe commit en train d'être annulé.
DestructriceN'y touche pasBISECT_LOGtemporaireLes étapes d'un git bisect.
Sans risqueTu peux y touchersequencer/temporaireL'état d'un cherry-pick ou d'un revert de plusieurs commits.
DestructriceN'y touche pasindex.locktemporaireshallowtemporaireLes commits où l'historique s'arrête (clone --depth).
PrudenceAvec précautionmodules/Les dépôts de tes sous-modules.
PrudenceAvec précautionRegarder dedans
Sans risque$ git submodule statusworktrees/Les dossiers de travail en plus créés avec git worktree add.
PrudenceAvec précautionRegarder dedans
Sans risque$ git worktree listlfs/Git LFS : les copies locales des gros fichiers.
PrudenceAvec précautionRegarder dedans
Sans risque$ git lfs ls-filesAUTO_MERGEtemporaireGit récent (2.42+) : l'arbre que Git a fusionné tout seul au dernier merge, conflits compris. Pratique pour voir ce que tu as changé en résolvant.
Sans risqueTu peux y toucherRegarder dedans
Sans risque$ git diff AUTO_MERGEgc.logtemporaireLes erreurs du dernier git gc automatique.
Sans risqueTu peux y toucher
Les 4 types d'objets
- blob
- le contenu d'un fichier (pas son nom)
- tree
- un dossier : des noms → des blobs et d'autres trees
- commit
- un tree + parent(s) + auteur + message
- tag
- un tag annoté : un nom et un message sur un commit
Voir n'importe quel objet : git cat-file -p 1a2b3c4
Et dans le tien ?
Colle le contenu de ton dossier .git : l'inspecteur te dit ce qui se passe (merge en cours, verrou oublié…).
$ ls -la .git
$ Get-ChildItem -Force .git