Команды add и commit. Добавление изменений и выполнение коммитов в Git
Если в каталоге проекта появляются новые файлы, то Git их "увидит". Однако это не означает, что он их автоматически "проиндексирует" и начнет следить за изменением содержимого файлов. В выводе git status
такие файлы и папки находятся в секции неотслеживаемых (untracked):
$ git status Текущая ветка: master Еще нет коммитов Неотслеживаемые файлы: (используйте «git add <файл>...», чтобы добавить в то, что будет включено в коммит) docs/ program.py readme.md индекс пуст, но есть неотслеживаемые файлы (используйте «git add», чтобы проиндексировать их)
Чтобы Git начал следить за новыми файлами, ему надо указать это явно с помощью команды git add
. В качестве параметров передаются адреса/имена файлов или Glob-шаблоны. Если добавляется папка, команда рекурсивно добавит в индекс все файлы из указанного каталога. Также можно указать ключ --all
или точку, и тогда в индекс будут отправлены все неотслеживаемые объекты проекта или текущего каталога.
$ git add program.py readme.md $ git status Текущая ветка: master Еще нет коммитов Изменения, которые будут включены в коммит: (используйте «git rm --cached <файл>...», чтобы убрать из индекса) новый файл: program.py новый файл: readme.md Неотслеживаемые файлы: (используйте «git add <файл>...», чтобы добавить в то, что будет включено в коммит) docs/
Коммит - это фиксация состояния проекта на определенный момент. С помощью коммитов происходит обмен изменениями в проекте между разными компьютерами (например, локальным и сервером). Кроме того, можно откатывать проект к предыдущим коммитам, если что-то пошло не так.
Коммиты выполняются с помощью команды git commit
, после которой указывают ключ -m
и в кавычках пишут небольшой комментарий о том, какие изменения были внесены.
$ git commit -m "Создан главный файл приложения и readme.md" [master (корневой коммит) 0fd6402] Создан главный файл приложения и readme.md 2 files changed, 2 insertions(+) create mode 100644 program.py create mode 100644 readme.md $ git status Текущая ветка: master Неотслеживаемые файлы: (используйте «git add <файл>...», чтобы добавить в то, что будет включено в коммит) docs/ индекс пуст, но есть неотслеживаемые файлы (используйте «git add», чтобы проиндексировать их) $ git log commit 0fd6402ad98aad3902f1813c2964e749d13adff0 (HEAD -> master) Author: Ivan Ivanov <ivan@mail.com> Date: Thu May 29 15:53:06 2025 +0300 Создан главный файл приложения и readme.md
Команда git log
позволяет просматривать историю коммитов. Ключ -n
(где n - число) - ограничивает вывод только последними коммитами в количестве n.
В примере выше каталог docs не был включен в коммит. Это означает, что если будет выполнено "копирование" (пуш) коммита на другой компьютер, этот каталог там не появится. Так делают, если этап разработки какой-либо части проекта еще не завершен, и не желательно распространять изменения в таком виде.
Если содержимое отслеживаемого файла меняется, Git "замечает" это. Однако, как и в случае с новыми файлами, автоматически не будет индексировать изменения для следующего коммита.
$ git status Текущая ветка: master Изменения, которые не в индексе для коммита: (используйте «git add <файл>...», чтобы добавить файл в индекс) (используйте «git restore <файл>...», чтобы отменить изменения в рабочем каталоге) изменено: program.py Неотслеживаемые файлы: (используйте «git add <файл>...», чтобы добавить в то, что будет включено в коммит) docs/ индекс пуст (используйте «git add» и/или «git commit -a»)
Чтобы изменения "засчитались", надо снова дать команду git add
.
$ git add . $ git status Текущая ветка: master Изменения, которые будут включены в коммит: (используйте «git restore --staged <файл>...», чтобы убрать из индекса) новый файл: docs/part1.txt изменено: program.py
Можно сказать, что у команды add
двойное назначение. С ее помощью происходит как добавление новых файловых объектов, так и индексирование изменений в отслеживаемых.
Таким образом, простой алгоритм одного цикла работы (от коммита до коммита) с git-репозиторием выглядит так:
- Вносятся изменения в проект: правятся имеющиеся файлы, добавляются/удаляются новые.
- С помощью
git add
выполняется индексирование тех изменений, которые должны быть учтены в предстоящем коммите. - Командой
git commit -m "Описание внесенных изменений"
фиксируется новое состояние проекта.
Если все измененные отслеживаемые файлы должны быть добавлены в коммит (неотслеживаемых это не касается), то вместо одтельных git add
и git commit
можно дать "объединенную" команду, в которой вместо git add
используется ключ -a
у git commit
.
$ git commit -am "Добавлена переменная в главный файл приложения"
Если из проекта удаляется файл, то это изменение также надо индесировать с помощью git add
.
$ rm readme.md $ git status Текущая ветка: master Изменения, которые не в индексе для коммита: (используйте «git add/rm <файл>...», чтобы добавить или удалить файл из индекса) (используйте «git restore <файл>...», чтобы отменить изменения в рабочем каталоге) удалено: readme.md индекс пуст (используйте «git add» и/или «git commit -a»)
Пока коммит не сделан, удаленный файл можно восстановить. После коммита вы сможете "достать" его только из предыдущих стадий проекта.