git cat-file în Git

Afișează tipul, mărimea sau conținutul unui obiect din baza de date Git (commit, tree, blob sau etichetă adnotată).

Sintaxă comandă
git cat-file (-t | -s | -p | -e) <obiect>

Ce face git cat-file

Git păstrează totul ca obiecte identificate prin hash: blob (conținutul unui fișier), tree (un director), commit și tag (eticheta adnotată). git cat-file îți arată direct aceste obiecte și este cel mai bun mod de a înțelege cum funcționează Git „pe dinăuntru”.

Cu -p afișezi conținutul într-o formă lizibilă, cu -t afli tipul obiectului, iar cu -s mărimea în octeți. Poți folosi și expresii ca HEAD^{tree} sau HEAD:cale/fisier.txt în loc de hash.

Opțiuni și argumente

Opțiune / Parametru Descriere
-p Afișează conținutul obiectului într-un format ușor de citit.
-t Afișează tipul obiectului: blob, tree, commit sau tag.
-s Afișează mărimea obiectului, în octeți.
-e Nu afișează nimic; codul de ieșire este 0 dacă obiectul există.
--batch, --batch-check Citește nume de obiecte de la intrarea standard (folosit în scripturi).

Exemple

Exemplul 1: Cum arată un commit în baza de date Git

Un commit conține hash-ul arborelui (directorul rădăcină), autorul, data și mesajul. Datele sunt fixate ca hash-urile să fie mereu aceleași.

export GIT_AUTHOR_DATE="2026-10-20T10:00:00+03:00" GIT_COMMITTER_DATE="2026-10-20T10:00:00+03:00"
git init -q -b main catalog
cd catalog
git config user.name "Ana Popescu" && git config user.email "ana@exemplu.ro"
echo "Ana: 10" > note.txt
git add . && git commit -q -m "Nota Anei"
git cat-file -t HEAD
git cat-file -p HEAD

Rezultat

commit
tree bd0df69066325d5f2730a472981277f81498b1d0
author Ana Popescu <ana@exemplu.ro> 1792479600 +0300
committer Ana Popescu <ana@exemplu.ro> 1792479600 +0300

Nota Anei

Exemplul 2: Arborele unui commit și conținutul unui fișier

HEAD^{tree} este directorul rădăcină, iar HEAD:note.txt este fișierul așa cum a fost salvat în ultimul commit.

git init -q -b main catalog
cd catalog
git config user.name "Ana Popescu" && git config user.email "ana@exemplu.ro"
echo "Ana: 10" > note.txt
git add . && git commit -q -m "Nota Anei"
echo "Ana: 4" > note.txt
git cat-file -p 'HEAD^{tree}'
echo "--- in commit:"
git cat-file -p HEAD:note.txt
git cat-file -s HEAD:note.txt

Rezultat

100644 blob e3f01584ddb63532962f11e1f992753c33335d5c	note.txt
--- in commit:
Ana: 10
8

Greșeli frecvente

  • Așteptarea să vezi modificările nesalvate: git cat-file citește doar obiecte deja scrise în baza de date (commit-uri sau fișiere adăugate cu git add), nu fișierele de pe disc.
  • Uitarea ghilimelelor în jurul expresiilor cu acolade, ca 'HEAD^{tree}': unele shell-uri (de exemplu zsh) interpretează acoladele și caracterul ^.

Comenzi înrudite

  • git show: Afișează informații detaliate și diferențele de cod (diff) ale unui commit, etichetă sau fișier istoric.
  • git rev-parse: Transformă nume de ramuri, etichete sau expresii (HEAD~2, main^) în hash-uri și răspunde la întrebări despre depozit în scripturi.
  • git ls-files: Listează fișierele din index (urmărite de Git), dar și fișierele modificate, neurmărite sau ignorate.