linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Инструменты/rev-parse

kb/tools ── Инструменты ── intermediate

git rev-parse

Plumbing-команда, которая переводит человекочитаемые имена ссылок (HEAD, main~2, v1.0, :/typo) в полные SHA. Используется всеми porcelain-командами под капотом и удобна в скриптах.

view as markdownaka: git-rev-parse

git rev-parse - словарь Git'а. Знает все формы записи коммитов и ссылок и переводит их в один канонический SHA.

Базовая форма

bash
git rev-parse HEAD
# a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
git rev-parse main
# 7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d

Если имя неоднозначно - выдаст ошибку. Если такого имени нет - exit code ненулевой.

Синтаксис ссылок

ЗаписьЧто значит
HEADкуда сейчас указывает HEAD
mainвершина ветки main
v1.0коммит, на который указывает тег
HEAD~3три коммита назад по первому родителю
HEAD^первый родитель (то же что HEAD~1)
HEAD^2второй родитель (для merge-коммитов)
HEAD@{yesterday}где была HEAD вчера (через reflog)
:/fix typoпоследний коммит, в сообщении которого есть «fix typo»
<tag>^{commit}коммит, на который указывает annotated tag
HEAD:src/main.rsblob этого файла из текущего коммита

Утилитарные режимы

Помимо перевода имени в SHA, у rev-parse есть несколько практичных режимов:

bash
git rev-parse --show-toplevel
# /home/user/project           ← корень репозитория
git rev-parse --git-dir
# /home/user/project/.git      ← где лежит .git/
git rev-parse --abbrev-ref HEAD
# main                          ← имя текущей ветки
git rev-parse --short HEAD
# a1b2c3d                       ← короткий уникальный SHA
git rev-parse --is-inside-work-tree
# true                          ← мы в репозитории?

--show-toplevel особенно полезен в скриптах и git-hooks: из любой подпапки даёт корень репозитория.

В скриптах

Перевести «текущий коммит» в SHA и сохранить:

bash
CURRENT=$(git rev-parse HEAD)

Проверить, что в репозитории:

bash
if git rev-parse --git-dir > /dev/null 2>&1; then
  echo "это git repo"
fi

Получить имя текущей ветки (без refs/heads/):

bash
BRANCH=$(git rev-parse --abbrev-ref HEAD)

Это всё стандартные приёмы в bash-скриптах вокруг Git.

Подводные камни

  • HEAD^ и HEAD~1 это одно и то же. Но HEAD^2 ≠ HEAD~2: первое - второй родитель merge-коммита, второе - второй коммит назад по первому родителю.
  • git rev-parse <tag> для annotated tag вернёт SHA tag-объекта, а не коммита. Если нужен коммит - <tag>^{commit}.
  • На пустом репозитории git rev-parse HEAD вернёт ошибку, потому что HEAD ещё ни на что не указывает.

§ команды

bash
git rev-parse HEAD

SHA текущего коммита

bash
git rev-parse --abbrev-ref HEAD

Имя текущей ветки

bash
git rev-parse --show-toplevel

Путь к корню репозитория

bash
git rev-parse HEAD:src/main.rs

SHA blob'а этого файла в текущем коммите

§ см. также

  • cat-filegit cat-filePlumbing-команда для чтения объектов в `.git/objects/` по их SHA. Главные флаги: `-t` (тип), `-s` (размер), `-p` (содержимое в человекочитаемом виде), `-e` (проверить, есть ли объект).
  • loggit logОбходит граф коммитов и печатает каждый. По умолчанию начинает с HEAD и идёт по родителям. Десяток флагов покрывает 95% сценариев просмотра истории.
  • branchВетка (branch)Ветка в Git - это файл в `.git/refs/heads/`, в котором лежит SHA одного коммита. Создание, переключение и удаление веток тривиальны, потому что данных в ветке - 41 байт.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки