Перейти к основному содержимому

7.03. Внутренности Git

Разработчику Архитектору Инженеру

Внутренности .git и алиасы

Когда вы инициализируете репозиторий с помощью git init, создаётся скрытая папка .git. Это всё, что Git использует для отслеживания изменений.

Файл/ПапкаОписание
HEADУказывает на текущую ветку или коммит (если detached). Обычно содержит ссылку на refs/heads/<branch>. Например, refs/heads/main содержит SHA-1 последнего коммита на ветке main.
configКонфигурационный файл локального репозитория (имя пользователя, remote-репозитории и т.д.). Пример содержимого: [user] name = John Doe email = john@example.com [remote "origin"] url = https://github.com/john/repo.git fetch = +refs/heads/*:refs/remotes/origin/*
descriptionОписание репозитория (используется в GUI-инструментах)
hooks/Каталог для скриптов, выполняемых при определённых событиях Git (например, pre-commit, post-merge)
indexИндекс (staging area) — список файлов, подготовленных к включению в следующий коммит
info/Содержит служебную информацию, например, исключения для отображения в git log
logs/Журнал изменений ссылок (refs) и HEAD
objects/Хранение всех данных репозитория: коммитов, деревьев (trees), блобов (файлов) в сжатом виде по хешам SHA-1. Файлы размещаются в подкаталогах, имена которых соответствуют первым двум символам хеша, например: objects/ab/cdef1234567890...
refs/Каталог ссылок на коммиты: ветки (refs/heads/), теги (refs/tags/), удалённые ветки (refs/remotes/)

Git позволяет создавать алиасы для команд — чтобы упростить и ускорить работу.

git config --global alias.<alias-name> "<command>"

Примеры:

# git st → git status
git config --global alias.st "status"

# git co → git checkout
git config --global alias.co "checkout"

# git br → git branch
git config --global alias.br "branch"

# git ci → git commit
git config --global alias.ci "commit"

# git lg → красивый вывод лога
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# git amend → исправить последний коммит
git config --global alias.amend "commit --amend -C HEAD"

# git undo → отменить последний коммит
git config --global alias.undo "reset HEAD~1"

# git unstage → убрать файл из индекса
git config --global alias.unstage "reset HEAD --"

Алиасы хранятся в глобальном конфиге Git ~/.gitconfig или git config --global --edit. Пример содержимого:

[alias]
st = status
co = checkout
br = branch
ci = commit
undo = reset HEAD~1
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Алиасы можно использовать не только для простых команд, но и для сложных сочетаний. Можно добавлять даже собственные shell-команды через !.