Git Toolbox

// 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

  • HEAD

    Là où tu es : en général « ref: refs/heads/main ». Un hash brut veut dire HEAD détachée.

    DestructriceN'y touche pas

    Regarder dedans

    Sans risque
    $ cat .git/HEAD
  • config

    Les 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écaution

    Regarder dedans

    Sans risque
    $ git config --local --list
  • description

    Utilisé seulement par GitWeb. Tu peux l'ignorer.

    Sans risqueTu peux y toucher
  • index

    La zone de staging : la photo exacte de ton prochain commit (fichier binaire).

    DestructriceN'y touche pas

    Regarder dedans

    Sans risque
    $ git ls-files --stage
  • objects/

    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 pas

    Regarder dedans

    Sans risque
    $ git count-objects -vH
    • pack/

      Les objets regroupés (.pack + .idx), avec des deltas entre versions. Créés par clone, fetch et git gc.

      DestructriceN'y touche pas

      Regarder dedans

      Sans risque
      $ git verify-pack -v .git/objects/pack/*.idx | sort -k3 -n | tail -5
    • info/

      Infos annexes de la base d'objets (alternates, liste des packs).

      Sans risqueTu peux y toucher
    • a1//

      Objets en vrac : les 2 premiers caractères du hash en dossier, les 38 autres en nom de fichier.

      DestructriceN'y touche pas

      Regarder 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écaution

    Regarder dedans

    Sans risque
    $ git show-ref
    • heads/

      Tes branches locales. refs/heads/main contient le hash du dernier commit de main.

      PrudenceAvec précaution

      Regarder dedans

      Sans risque
      $ git branch -v
    • tags/

      Tes tags (v1.0.0…).

      PrudenceAvec précaution

      Regarder dedans

      Sans risque
      $ git tag -n
    • remotes/

      Le dernier état connu des branches distantes (origin/main…), mis à jour par fetch.

      Sans risqueTu peux y toucher

      Regarder dedans

      Sans risque
      $ git branch -r
    • stash

      Tes stashs.

      PrudenceAvec précaution

      Regarder dedans

      Sans risque
      $ git stash list
  • packed-refs

    Beaucoup de refs dans un seul fichier, pour la vitesse. Une branche peut être ici au lieu de refs/heads/.

    PrudenceAvec précaution

    Regarder dedans

    Sans risque
    $ cat .git/packed-refs
  • logs/

    Le reflog : chaque position qu'ont eue HEAD et chaque branche. C'est ce qui te sauve après un mauvais reset.

    PrudenceAvec précaution

    Regarder dedans

    Sans risque
    $ git reflog
    En savoir plus →
  • hooks/

    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 toucher
    En savoir plus →
  • info/

    info/exclude : un .gitignore personnel qui n'est jamais commité.

    Sans risqueTu peux y toucher

    Regarder dedans

    Sans risque
    $ cat .git/info/exclude
  • COMMIT_EDITMSG

    Le message de ton dernier commit, tel que tapé dans l'éditeur.

    Sans risqueTu peux y toucher
  • FETCH_HEADtemporaire

    Ce que le dernier fetch a ramené.

    Sans risqueTu peux y toucher

    Regarder dedans

    Sans risque
    $ cat .git/FETCH_HEAD
  • ORIG_HEADtemporaire

    Où était HEAD avant la dernière opération risquée (merge, rebase, reset).

    Sans risqueTu peux y toucher

    Regarder dedans

    Sans risque
    $ git log -1 ORIG_HEAD
  • MERGE_HEADtemporaire

    Le commit en train d'être mergé.

    DestructriceN'y touche pas
    En savoir plus →
  • MERGE_MSGtemporaire

    Le message préparé du commit de merge.

    Sans risqueTu peux y toucher
  • rebase-merge/temporaire

    L'état d'un rebase (interactif ou non).

    DestructriceN'y touche pas
    En savoir plus →
  • rebase-apply/temporaire

    L'état d'un git am ou d'un rebase à l'ancienne.

    DestructriceN'y touche pas
  • CHERRY_PICK_HEADtemporaire

    Le commit en train d'être cherry-pické.

    DestructriceN'y touche pas
  • REVERT_HEADtemporaire

    Le commit en train d'être annulé.

    DestructriceN'y touche pas
  • BISECT_LOGtemporaire

    Les étapes d'un git bisect.

    Sans risqueTu peux y toucher
  • sequencer/temporaire

    L'état d'un cherry-pick ou d'un revert de plusieurs commits.

    DestructriceN'y touche pas
  • index.locktemporaire

    Un verrou pris par une commande Git en cours.

    PrudenceAvec précaution
    En savoir plus →
  • shallowtemporaire

    Les commits où l'historique s'arrête (clone --depth).

    PrudenceAvec précaution
  • modules/

    Les dépôts de tes sous-modules.

    PrudenceAvec précaution

    Regarder dedans

    Sans risque
    $ git submodule status
  • worktrees/

    Les dossiers de travail en plus créés avec git worktree add.

    PrudenceAvec précaution

    Regarder dedans

    Sans risque
    $ git worktree list
  • lfs/

    Git LFS : les copies locales des gros fichiers.

    PrudenceAvec précaution

    Regarder dedans

    Sans risque
    $ git lfs ls-files
  • AUTO_MERGEtemporaire

    Git 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 toucher

    Regarder dedans

    Sans risque
    $ git diff AUTO_MERGE
  • gc.logtemporaire

    Les 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é…).

Sans risque
$ ls -la .git
Sans risque
$ Get-ChildItem -Force .git
Tout reste dans ton navigateur.