Область подготовки
Область подготовки (staging area), также известная как индекс (index), — это один из внутренних механизмов Git, который позволяет выбрать определённые изменения в файлах проекта, чтобы сохранить их в следующем коммите (считай это снимком состояния или чекпоинтом) в твоём репозитории Git.
Вопрос: зачем вообще выбирать какие-то конкретные изменения? Почему бы просто не сохранять всё подряд?
Ответ: можно делать и так. Однако на практике часто бывает, что в процессе работы появляются изменения, вообще никак не связанные друг с другом, даже если изначально такого плана не было.
Например, во время работы над новой возможностью можно случайно заметить опечатку в названии переменной в старом коде или обновить недостающую документацию. Эти правки не имеют отношения к новой возможности, и их лучше коммитить отдельно. Тогда, если позже понадобится отменить изменения по этой возможности, исправление опечатки и обновлённая документация никуда не пропадут.
Область подготовки в Git позволяет:
-
Выбирать изменения для включения в следующий коммит, добавляя в область подготовки только нужные файлы или даже части файлов. Это даёт возможность создавать чёткие и осмысленные коммиты, посвящённые конкретным задачам или функциям.
-
Проверять изменения в области подготовки перед тем, как окончательно их закоммитить, чтобы убедиться в их правильности и полноте. Это помогает отлавливать случайные правки или добавления до того, как они попадут в историю репозитория.
-
Работать постепенно: закончить одну часть, добавить правки в область подготовки; продолжить работу над другими частями и добавить их позже. Такая гибкость позволяет постепенно собирать стабильный, самодостаточный набор изменений.
-
Отделять незавершённую работу от готовой. Если что-то пошло не так, всегда можно отменить изменения, которые не были добавлены в область подготовки, не затрагивая при этом уже подготовленные файлы.
Примеры
Проверить состояние области подготовки и рабочего дерева:
git statusДобавить в область подготовки один файл:
git add myfile.txtДобавить в область подготовки все изменения из директории:
git add src/Символ . указывает на текущую директорию, то есть означает «все изменения в текущей директории». Если запустить эту команду в корне репозитория, она добавит в область подготовки все изменения во всём проекте:
git add .Зафиксировать подготовленные изменения в истории репозитория (закоммитить) с указанным сообщением:
git commit -m "Добавление возможности XYZ или исправление ошибки ABC"Удалить все изменения из области подготовки (но не отменять сами изменения в файлах):
git restore --staged .Здесь снова появляется символ . — он означает «убрать из области подготовки все изменения в текущей директории».
Также можно указать конкретный файл или директорию:
git restore --staged path/to/file.txt.gitignoregit checkoutgit configgit taggit worktree