git rev-parse

Przekształca referencje i argumenty na pełne identyfikatory commitów lub ścieżki.

git rev-parse to scyzoryk Gita do tłumaczenia tego, co ludzkie, na to, co Git rozumie. Bierze referencję (gałąź, tag, HEAD, skrót HEAD~3) i zwraca pełny identyfikator commita (40-znakowy SHA-1) albo informacje o samym repozytorium: gdzie jest jego korzeń, gdzie siedzi katalog .git, czy w ogóle stoisz w drzewie roboczym. Sam nic nie zmienia ani nie commituje, dlatego jest ulubieńcem skryptów i hooków, które potrzebują pewnej, jednoznacznej odpowiedzi zamiast zgadywania.

Składnia i najważniejsze opcje

Podstawowa forma to git rev-parse [opcje] . Najczęściej używasz jednej z poniższych flag:

  • --abbrev-ref — zwraca krótką, czytelną nazwę zamiast pełnego SHA, np. dla HEAD wypluje nazwę bieżącej gałęzi.
  • --short[=N] — skraca hash do najkrótszej jednoznacznej postaci (domyślnie ok. 7 znaków, opcjonalnie podajesz długość).
  • --verify — sprawdza, że podano dokładnie jedną referencję, którą da się rozwinąć do prawdziwego obiektu; jeśli nie, kończy się błędem zamiast cichą bzdurą.
  • --show-toplevel — wypisuje absolutną ścieżkę do korzenia repozytorium, nawet gdy stoisz w podkatalogu.
  • --git-dir — pokazuje ścieżkę do katalogu .git bieżącego repo.
  • --is-inside-work-tree — zwraca true lub false w zależności od tego, czy jesteś w drzewie roboczym.
  • --quiet — wycisza komunikaty, przydatne ze --verify w warunkach skryptu.

Przykłady użycia

  • git rev-parse HEAD — wypisuje pełny SHA-1 commita, na którym aktualnie siedzisz.
  • git rev-parse --abbrev-ref HEAD — zwraca nazwę bieżącej gałęzi, klasyk do promptów w shellu i do CI.
  • git rev-parse --short HEAD — krótki hash do logów czy numeru buildu, np. a1b2c3d.
  • git rev-parse --show-toplevel — daje ścieżkę do korzenia repo, idealne do cd "$(git rev-parse --show-toplevel)".
  • git rev-parse --verify origin/main — potwierdza, że gałąź zdalna istnieje i rozwija ją do SHA, zanim coś na niej odpalisz.

Częste błędy i pułapki

Najczęstsza wpadka to traktowanie git rev-parse HEAD jako uniwersalnego sprawdzacza. W świeżym repo bez żadnego commita HEAD jeszcze na nic nie wskazuje, więc dostaniesz błąd, nie pusty wynik. Po drugie: w skryptach zawsze dodawaj --verify --quiet, bo gołe git rev-parse jakas-fraza potrafi zwrócić argument bez zmian (i kod wyjścia 0), gdy nie rozpozna go jako referencji, co cicho psuje logikę. Pamiętaj też o kolejności: --abbrev-ref musi stać przed referencją, nie po. Mylenie --show-toplevel (korzeń drzewa roboczego) z --git-dir (katalog .git) też zbiera żniwo, szczególnie przy submodułach i worktree, gdzie te ścieżki się rozjeżdżają. Zachowanie flag jest identyczne na Linuksie, macOS i Windows, więc tu różnic między systemami się nie spodziewaj.

Powiązane komendy: git symbolic-ref, git show-ref, git describe, git branch oraz git log.