#2 git Добавляем изменения и фиксируем их, учимся работать с историей

Как гит отслеживает изменения - понятия коммит-а

Это происходит просто — вы сами уведомляете git о том, что текущее состояние проекта — очередная веха в его истории. Такое зафиксированное состояние называется коммитом (от англ. commit — «фиксация»).

Важно понимать: коммит запоминает не отдельный файл, а состояние всех файлов репозитория — как "снимок" (snapshot) всего проекта.
К любому такому снимку потом можно вернуться, "откатив" изменения (это одна из важнейших возможностей git-а)

При этом git не делает снимки сам — вы указываете ему, какие изменения должны попасть в очередной коммит. Для этого служат две основные команды:

  • git add — подготовить изменения (добавить их в так называемый индекс);
  • git commit — зафиксировать подготовленное (создать коммит).

Типичный цикл работы выглядит так: изменили файлы → git add → git commit — и так по кругу.

Добавляем файл в проект

Продолжим работать с репозиторием, который мы создали в уроке #1. Перейдите в его папку и создайте обычный текстовый файл, например hello.txt — в любом редакторе или прямо в консоли:

echo "Привет, git!" > hello.txt

Теперь спросим у git, что он думает о состоянии папки:

git status

В ответ увидите примерно следующее:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	hello.txt

nothing added to commit but untracked files present (use "git add" to track)

Git сообщает, что нашёл неотслеживаемый (untracked) файл: он его видит, но в историю пока не включает — вы ещё не сказали, что этот файл должен стать частью проекта. (Имя ветки может быть master или main — в зависимости от версии git и настроек, это нормально.)

git add — готовим изменения к фиксации

Чтобы файл попал в следующий коммит, его нужно добавить в индекс (staging area) — промежуточную область, куда складываются изменения, готовящиеся к фиксации:

git add hello.txt

Можно добавить сразу всё содержимое текущей папки — эта форма особенно удобна, когда изменений много:

git add .

Снова выполните git status — файл теперь находится в разделе Changes to be committed ("изменения, готовые к фиксации"), т.е. лежит на "сцене" и ждёт коммита.

git commit — фиксируем изменения

Создаём коммит — сохраняем подготовленный снимок в историю репозитория:

git commit -m "Добавляем первый файл hello.txt"

Ключ -m задаёт сообщение коммита — короткое описание того, что и зачем сделано. Сообщения пишутся для людей: по ним (а не по коду) история просматривается глазами. Хороший тон — коротко и по существу, например:

  • "Добавляем файл с планами проекта"
  • "Исправляем ошибку в подсчёте суммы"

В ответ git напечатает краткий отчёт: в какой ветке создан коммит, его идентификатор, сколько файлов и строк изменено.

git log — смотрим историю

Историю всех коммитов показывает команда:

git log

Для каждого коммита git выведет:

  • хеш — уникальный идентификатор вида a1b2c3d... (именно по нему позже можно будет вернуться к этому состоянию);
  • автора и дату создания;
  • сообщение, которое вы указали после -m.

Просмотр прокручивается стрелками, выход — клавишей q.

Есть и краткая, однострочная версия вывода:

git log --oneline

Закрепляем: ещё один цикл изменений

Измените hello.txt (допишите вторую строку) и повторите весь цикл, наблюдая за git status на каждом шаге:

git status                             # файл изменён, но ещё не подготовлен
git add hello.txt
git status                             # изменение готово к фиксации
git commit -m "Дополняем hello.txt второй строкой"
git log --oneline

В истории появились два коммита — вы только что создали первые записи в истории вашего проекта. Дальше всё то же самое: изменил → добавил → зафиксировал.

Итого

  • git хранит историю как цепочку коммитов — снимков всего проекта;
  • git status — смотрим текущее состояние, git add — готовим изменения, git commit -m "..." — фиксируем, git log — изучаем историю.

В следующем уроке мы свяжем наш локальный репозиторий с внешним и опубликуем изменения — урок #3.

Видео-материалы