git for-each-ref în Git

Listează ramurile, etichetele și alte referințe într-un format ales de tine, sortate după dată, nume sau autor.

Sintaxă comandă
git for-each-ref [--sort=<cheie>] [--format=<format>] [--count=<n>] [<tipar>...]

Ce face git for-each-ref

git for-each-ref parcurge referințele din depozit (refs/heads/ pentru ramuri, refs/tags/ pentru etichete, refs/remotes/ pentru ramurile de pe server) și afișează pentru fiecare câmpurile pe care le ceri în --format.

Este comanda potrivită pentru rapoarte și scripturi: „ce ramuri au fost atinse ultima dată și de cine”, „care e cea mai nouă etichetă”, „ce ramuri nu mai au corespondent pe server”. Câmpurile se scriu ca %(refname:short), %(committerdate:short), %(authorname), %(subject).

Opțiuni și argumente

Opțiune / Parametru Descriere
--format=FORMAT Șablonul fiecărei linii, cu câmpuri de tip %(nume).
--sort=CHEIE Ordinea; prefixul - inversează (de exemplu --sort=-committerdate).
--count=N Afișează doar primele N referințe.
--merged / --no-merged [commit] Doar referințele integrate (sau neintegrate) în commit-ul dat.
--contains COMMIT Doar referințele care conțin commit-ul dat.
refs/heads/, refs/tags/ Tipare care limitează tipul referințelor listate.

Exemple

Exemplul 1: Ramurile, de la cea mai recent modificată

Datele commit-urilor sunt fixate pentru un rezultat stabil.

git init -q -b main magazin
cd magazin
git config user.name "Ana Popescu" && git config user.email "ana@exemplu.ro"
c() { GIT_AUTHOR_DATE="$1T10:00:00+03:00" GIT_COMMITTER_DATE="$1T10:00:00+03:00" git commit -q --allow-empty -m "$2"; }
c 2026-09-01 "Start"
git switch -q -c feature/cos && c 2026-10-15 "Cos de cumparaturi"
git switch -q main && git switch -q -c fix/tva && c 2026-10-02 "TVA corect"
git for-each-ref --sort=-committerdate \
    --format='%(committerdate:short) %(refname:short) - %(subject)' refs/heads/

Rezultat

2026-10-15 feature/cos - Cos de cumparaturi
2026-10-02 fix/tva - TVA corect
2026-09-01 main - Start

Exemplul 2: Cea mai nouă etichetă de versiune

--sort=-v:refname sortează numele ca versiuni (v1.10 după v1.9), nu alfabetic.

git init -q -b main aplicatie
cd aplicatie
git config user.name "Ana Popescu" && git config user.email "ana@exemplu.ro"
git commit -q --allow-empty -m "Start"
for v in v1.2.0 v1.9.0 v1.10.0; do git tag "$v"; done
git for-each-ref --sort=-v:refname --count=1 --format='%(refname:short)' refs/tags/

Rezultat

v1.10.0

Greșeli frecvente

  • Folosirea --sort=refname pentru versiuni: sortarea alfabetică pune v1.10.0 înaintea lui v1.9.0. Pentru numere de versiune folosește v:refname (sau version:refname).
  • Parsarea ieșirii lui git branch în scripturi în loc de git for-each-ref: formatul lui git branch este pentru oameni și poate conține culori sau marcajul *.

Comenzi înrudite

  • git branch: Listează, creează, redenumește sau șterge ramuri (branches) de dezvoltare.
  • git tag: Creează, listează, șterge sau verifică etichete de versiune (release tags) care marchează puncte cheie din 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.