Обозреватель объектов
За git закрепилась репутация сложного. Почти вся она берётся из того, что модель никто никогда не видел: четыре вида объектов и указатели. Как только вы сможете кликнуть по коммиту, попасть на его дерево и обнаружить, что ваш файл и есть блоб с именем, которое ему выдало дерево, — фарфор перестанет быть магией.
⌘K → Обозреватель объектов. Ничто на этой странице не может изменить ни
байта — за каждым вызовом стоит чтение.

Четыре объекта
| Объект | Это | Знает |
|---|---|---|
| blob | Содержимое файла | Ничего. Ни своего имени, ни пути, ни истории |
| tree | Список содержимого каталога | Имена, режимы и sha каждого дочернего блоба или дерева |
| commit | Один снимок | Своё дерево, своих родителей, автора, коммиттера, сообщение |
| tag | Аннотированный тег | Объект, на который указывает, кто его поставил, сообщение |
Сюрприз для большинства — первая строка. У блоба нет имени. Два файла с одинаковым содержимым где угодно в вашей истории — это один и тот же блоб, сохранённый один раз. Имя живёт в дереве, которое на него указывает, — вот почему git отслеживает содержимое, а не файлы, и почему переименования определяются, а не записываются.
Ссылка — refs/heads/main, refs/tags/v1.0, HEAD — это просто файл с sha
внутри. Вот и всё содержание фразы «ветки в git дёшевы».
Обход
Левая колонка перечисляет все ссылки репозитория, сгруппированные так же, как их группирует git. Кликните по одной — попадёте на объект, который она называет.
Дальше всё является ссылкой:
- Коммит показывает своё
treeи каждогоparent— можно провалиться в снимок или уйти назад по истории по одному коммиту за раз. - Дерево перечисляет свои записи с режимом, типом, sha и размером. Клик по имени открывает потомка.
- Блоб показывает свой текст (для больших — его начало) или прямо говорит, что он бинарный.
- Аннотированный тег показывает, на что указывает, — кликом можно перейти к коммиту.
Назад отматывает ваши шаги.
Ввод ревизии
Поле принимает всё, что принимает git rev-parse, — и именно здесь это
перестаёт быть браузером и становится способом научиться:
| Наберите | Чтобы получить |
|---|---|
HEAD |
Текущий коммит |
HEAD~3 |
Три коммита назад |
HEAD^{tree} |
Дерево этого коммита, очищенное |
HEAD:src/app.ts |
Блоб по этому пути, напрямую |
v1.0^{} |
То, на что указывает аннотированный тег, а не сам объект тега |
a1b2c3d |
Любой объект по sha — сокращения работают |
Цифры режима в листинге дерева стоит знать: 100644 — файл, 100755 —
исполняемый, 040000 — поддерево, 120000 — симлинк, 160000 — гитлинк
сабмодуля; последнее и есть всё, что сабмодуль хранит.
Ограничения, о которых стоит знать
- Только чтение, и это намеренно. Писать здесь нечем. Изготовление объектов
руками — упражнение с
git hash-object, и его место в терминале. - Большие блобы обрезаются после первых 200 КБ — достаточно, чтобы понять, что это, и недостаточно, чтобы повесить окно.
- Размеры — это размер содержимого объекта в том виде, в каком его сообщает
git cat-file -s, а не то, во что он обходится на диске после упаковки. Про это — обслуживание. - Недостижимые объекты — тоже объекты. Вставьте sha из отчёта
git fsckо висячих объектах, и он откроется; часто это самый быстрый способ посмотреть, что было в потерянном коммите, прежде чем решать, восстанавливать ли его.
См. также: Граф · Обслуживание репозитория · Восстановление