В КУРСЕ?

Разбираемся в теме

Файл сохранён, а в коммите его нет: три состояния изменений в Git

Git — распределённая система контроля версий. Она полезна не только при написании программ: Git помогает проследить изменения текстовых файлов, сравнить варианты и понять причину конкретной правки. При этом Git не записывает каждое сохранение автоматически. Пользователь выбирает изменения для очередного коммита. Для начала важно различать редактирование файла, подготовку снимка в индексе Git и окончательную запись в репозиторий.

Три места для одного изменения

Рабочая папка содержит файлы, которые вы редактируете. Область подготовки, или индекс, описывает содержимое будущего коммита. Сам коммит сохраняет подготовленный снимок в истории репозитория. Между этими состояниями есть важная граница: изменение после добавления в индекс не попадает туда автоматически. Например, вы подготовили первую редакцию абзаца, а затем исправили ещё одно слово. Следующий коммит может сохранить первую редакцию, если не подготовить новую правку. Поэтому перед записью полезно отдельно проверять рабочие изменения и уже подготовленные. Команда git status показывает состояние файлов, git diff — неподготовленные различия, а git diff --staged — изменения, уже включённые в индекс Git.

Один коммит отвечает на один вопрос

Хорошая единица истории объясняет законченное намерение: исправлена опечатка, уточнено условие, добавлен пример. Если в одном коммите смешаны оформление, удаление раздела и изменение смысла, его сложнее проверять. Небольшой размер сам по себе не цель: важно, чтобы части относились к одной задаче. Сообщение коммита должно называть результат, а при необходимости объяснять причину. Фраза «поправил разное» почти не помогает будущему читателю. Представьте, что через месяц нужно найти изменение без открытия каждого файла: понятные сообщения значительно упрощают поиск.

История, ветка и совместная работа

Ветка позволяет развивать отдельную линию изменений, не смешивая незавершённую работу с другой линией. Она не означает отдельную копию проекта, которую обязательно нужно вручную переносить между папками. При объединении изменений иногда возникает конфликт: система не может самостоятельно выбрать правильное сочетание правок. Решение требует понимания смысла текста, а не механического удаления служебных отметок. Удалённый репозиторий помогает обмениваться историей, но локальный коммит сам по себе никуда не отправляется. Сохранение в историю и передача другим участникам — отдельные действия.

Проверка важнее привычного нажатия

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

Попробуйте на практике

Воспроизведите цикл Git в отдельной учебной папке, если Git уже установлен. При отсутствии программы выполните тот же цикл на бумаге с тремя колонками.

  1. Создайте пустую папку для упражнения, откройте в ней терминал и выполните git init. Не используйте существующий рабочий проект.
  2. Создайте файл note.txt с одним безобидным предложением. Посмотрите git status и подготовьте файл командой git add note.txt.
  3. Допишите в файл второе предложение, затем сравните вывод git diff и git diff --staged: это две разные правки относительно разных состояний.
  4. Если имя и адрес автора Git уже настроены, выполните git commit -m "Добавить первую заметку". Если нет, просто зафиксируйте ожидаемый снимок на бумаге, не меняя настройки.
  5. Снова изучите git status. Объясните, почему второе предложение осталось вне первого снимка.

Как проверить результат. Результат верен, если вы можете указать содержимое рабочей версии, индекса и первого коммита и объяснить, в какой момент появился каждый вариант.

Частые вопросы

Почему сохранённая в редакторе правка отсутствует в коммите?

Сохранение меняет рабочий файл. Для обычного коммита важен подготовленный снимок, который мог быть создан до последней правки. Проверяйте, какое содержимое действительно включено в индекс.

Нужен ли удалённый сервис для изучения основных принципов?

Нет. Локальный репозиторий позволяет знакомиться с историей и подготовкой изменений. Удалённое размещение добавляет обмен с другими участниками, но не является условием существования коммитов.

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

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов