Ключевые концепции

Область подготовки

Область подготовки (staging area), также известная как индекс (index), — это один из внутренних механизмов Git, который позволяет выбрать определённые изменения в файлах проекта, чтобы сохранить их в следующем коммите (считай это снимком состояния или чекпоинтом) в твоём репозитории Git.

Вопрос: зачем вообще выбирать какие-то конкретные изменения? Почему бы просто не сохранять всё подряд?

Ответ: можно делать и так. Однако на практике часто бывает, что в процессе работы появляются изменения, вообще никак не связанные друг с другом, даже если изначально такого плана не было.

Например, во время работы над новой возможностью можно случайно заметить опечатку в названии переменной в старом коде или обновить недостающую документацию. Эти правки не имеют отношения к новой возможности, и их лучше коммитить отдельно. Тогда, если позже понадобится отменить изменения по этой возможности, исправление опечатки и обновлённая документация никуда не пропадут.

Область подготовки в Git позволяет:

  1. Выбирать изменения для включения в следующий коммит, добавляя в область подготовки только нужные файлы или даже части файлов. Это даёт возможность создавать чёткие и осмысленные коммиты, посвящённые конкретным задачам или функциям.

  2. Проверять изменения в области подготовки перед тем, как окончательно их закоммитить, чтобы убедиться в их правильности и полноте. Это помогает отлавливать случайные правки или добавления до того, как они попадут в историю репозитория.

  3. Работать постепенно: закончить одну часть, добавить правки в область подготовки; продолжить работу над другими частями и добавить их позже. Такая гибкость позволяет постепенно собирать стабильный, самодостаточный набор изменений.

  4. Отделять незавершённую работу от готовой. Если что-то пошло не так, всегда можно отменить изменения, которые не были добавлены в область подготовки, не затрагивая при этом уже подготовленные файлы.

Примеры

Проверить состояние области подготовки и рабочего дерева:

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