Три состояния файлов в git
Главная ментальная модель git: как файл «путешествует» от правки до коммита через три области.
В git файл всегда находится в одном из состояний и проходит через три области: рабочая директория → индекс → репозиторий.
Три области git
Это самая важная идея во всём курсе. Если вы поймёте её сейчас, дальше будет легко.
| Область | Что это |
| Рабочая директория (working directory) | Файлы, которые вы видите и редактируете прямо сейчас. |
| Индекс (staging area / index) | «Корзина» для изменений, которые войдут в следующий коммит. |
| Репозиторий (.git) | Зафиксированная история — все сделанные коммиты. |
Зачем нужен индекс
Индекс — самая необычная для новичков часть. Зачем нужна промежуточная «корзина»? Затем, что он позволяет собирать коммит вручную. Допустим, вы поправили пять файлов, но логически это две разные задачи. Вы можете добавить в индекс только три файла, сделать осмысленный коммит, а потом добавить оставшиеся два и сделать второй коммит. История получится аккуратной.
Состояния файла
Относительно git каждый файл бывает:
- Untracked — git его ещё не отслеживает (новый файл).
- Modified — отслеживается и изменён, но изменения ещё не в индексе.
- Staged — изменения добавлены в индекс и попадут в следующий коммит.
- Committed / unmodified — изменения сохранены в репозитории, файл совпадает с последним коммитом.
Путь файла на практике
Посмотрим, как файл проходит весь путь. Создадим его, добавим в индекс и закоммитим:
echo "Hello" > readme.txt # файл untracked в рабочей директории
git add readme.txt # переносим в индекс -> staged
git commit -m "Add readme" # фиксируем в репозитории -> committedКоманды-переходы между областями:
| Переход | Команда |
| рабочая директория → индекс | git add |
| индекс → репозиторий | git commit |
| индекс → рабочая директория (убрать из индекса) | git restore --staged |
Зачем это знание новичку
Большинство ошибок начинающих с git растут из непонимания этих трёх областей. «Почему мои изменения не попали в коммит?» — потому что вы не добавили их в индекс. «Почему git показывает файл как изменённый после add?» — потому что вы поправили его уже после добавления в индекс, и в рабочей директории появилась новая версия. Держите картину трёх областей в голове, и поведение git перестанет казаться загадочным.
Аналогия с посылкой
Удобная метафора: рабочая директория — это ваш стол, где вы складываете вещи. Индекс — открытая коробка, в которую вы кладёте именно то, что хотите отправить. Коммит — момент, когда коробку заклеили и отправили: содержимое зафиксировано навсегда. git add кладёт вещь в коробку, git commit — заклеивает и отправляет её в архив истории.
Итог
- Три области: рабочая директория, индекс (staging), репозиторий.
- Индекс позволяет собирать коммит вручную и группировать изменения логически.
git addпереносит изменения в индекс,git commit— в репозиторий.