git add и git commit

Двухшаговый процесс сохранения изменений в Git: сначала staging-area (индекс), затем фиксация в историю коммитом.

Зачем нужно

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

Где используется

  • Каждый раз при сохранении результата работы в историю репозитория
  • Разбивка большого изменения на несколько атомарных commit-ов
  • Подготовка только части изменённых файлов (patch staging)

Основной контент

Состояния файлов

Рабочая директория  →  Staging (индекс)  →  История (.git)
      (edit)              git add              git commit

git add

# Добавить конкретный файл
git add README.md

# Добавить все файлы в текущей папке рекурсивно
git add .

# Добавить файлы по шаблону
git add src/*.js

# Интерактивный выбор изменений (patch mode)
git add -p

# Добавить только уже отслеживаемые файлы (без untracked)
git add -u

git commit

# Commit с сообщением в командной строке
git commit -m "feat: добавить форму авторизации"

# Открыть редактор для написания длинного сообщения
git commit

# Добавить все изменённые отслеживаемые файлы и сразу закоммитить
git commit -am "fix: исправить опечатку в заголовке"

# Исправить последний commit (сообщение или состав файлов)
git commit --amend -m "feat: добавить форму авторизации и валидацию"

# Commit с пустым сообщением (для технических нужд)
git commit --allow-empty -m "chore: trigger CI"

Просмотр состояния перед commit

# Какие файлы в staging, какие изменены, какие untracked
git status

# Что именно изменилось в staging
git diff --staged

# Что изменилось но ещё не добавлено в staging
git diff

Пример типичного workflow

# 1. Отредактировали файлы
# 2. Посмотреть что изменилось
git status

# 3. Добавить нужные файлы
git add src/auth.js src/auth.test.js

# 4. Проверить что попало в staging
git diff --staged

# 5. Зафиксировать
git commit -m "feat(auth): добавить JWT-авторизацию"

Частые ошибки

  • git add . вместо выборочного добавления — в commit попадают временные файлы, .env, артефакты сборки; используй gitignore
  • Коммитить слишком много за раз — один commit должен делать одно логическое изменение
  • --amend на опубликованном commit — перезаписывает историю, которую уже видят другие; используй только для локальных commit-ов
  • Бессмысленные сообщения: "fix", "wip", "changes" — невозможно понять историю; следуй Conventional Commits

Связанные темы

Ресурсы