Коммиты и ветки: рабочий минимум
Три состояния файла и что на самом деле такое ветка.
Три состояния
Файл в Git находится в одном из трёх мест:
- Рабочий каталог — то, что вы видите и редактируете.
- Индекс (staging) — то, что попадёт в следующий коммит.
- Репозиторий — то, что уже зафиксировано.
git status # где что находится
git add file # рабочий каталог → индекс
git commit # индекс → репозиторий
git diff # рабочий каталог против индекса
git diff --staged # индекс против последнего коммита
Отдельный индекс существует затем, чтобы коммитить не всё подряд, а осмысленную часть изменений. git add -p даёт добавить отдельные куски одного файла.
Ветка — это указатель
Ветка в Git не копия файлов. Это файл с одним хешем коммита. Создание ветки — запись сорока байт, поэтому оно мгновенно.
git switch -c feature/login # создать и перейти
git switch main # вернуться
git branch -v # список и где каждая стоит
Коммит указывает на родителя, тот на своего — так получается история. HEAD указывает на текущую ветку.
Полезные команды при разборе
git log --oneline --graph --all -20 # картина ветвления
git log -p file # история изменений файла
git blame file # кто и когда менял каждую строку
git show <hash> # что именно было в коммите
git blame нужен не чтобы найти виноватого, а чтобы найти коммит и прочитать его сообщение — там обычно написано, почему код такой.
Сообщение коммита
Полезное сообщение объясняет почему, а не что: что изменилось, и так видно в диффе.
Плохо: fix
Плохо: изменил конфиг nginx
Лучше: увеличить client_max_body_size до 20m
Загрузка изображений уроков падала с 413: дефолтный
лимит nginx — 1 МБ, а картинки со скриншотами больше.
Через полгода именно это объяснение сэкономит время — вам же.