git status: что это и как читать вывод команды
git status — одна из самых часто используемых команд в Git. Она показывает текущее состояние рабочей директории и индекса (staging area): какие файлы изменены, какие подготовлены к коммиту, какие не отслеживаются. Это первая команда, которую стоит запускать перед любым коммитом.
Базовое использование #
git status
Вывод при чистом рабочем дереве (нет изменений):
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
Вывод при наличии изменений:
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: docs/setup.md
modified: README.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: src/main.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
temp.log
secrets.env
Интерпретация разделов вывода #
Вывод git status состоит из трёх разделов:
Changes to be committed (зелёный):
Файлы в индексе (staging area) — готовы к коммиту. git add уже был выполнен.
Changes not staged for commit (красный):
Файлы изменены на диске, но git add ещё не был выполнен. Не попадут в следующий коммит.
Untracked files (красный):
Новые файлы, которые Git вообще не отслеживает. Нужно явно добавить через git add.
Состояния файлов #
new file — новый файл добавлен через git add (появится в staged)
modified — существующий файл изменён
deleted — файл удалён
renamed — файл переименован (через git mv)
untracked — файл не под контролем Git
Компактный формат (–short / -s) #
git status -s
# или
git status --short
Вывод:
M README.md — modified (в индексе)
M src/main.js — modified (не в индексе)
A docs/setup.md — added (новый файл в индексе)
?? temp.log — untracked
!! node_modules/ — ignored (только с --ignored)
Первый символ — состояние в индексе. Второй — состояние в рабочей директории.
Таблица символов:
' ' — не изменён
M — изменён
A — добавлен
D — удалён
R — переименован
C — скопирован
U — обновлён (unmerged)
? — untracked
! — ignored
Информация о ветке #
# Краткая информация о ветке
git status -sb
# ## main...origin/main [ahead 1]
# Расшифровка:
# ## main — текущая ветка
# ...origin/main — tracking branch
# [ahead 1] — 1 коммит, не запушенный на remote
# [behind 2] — 2 коммита на remote, не подтянутых локально
# [ahead 1, behind 2] — оба направления расходятся
Просмотр статуса конкретного файла или папки #
# Статус только src/ папки
git status src/
# Статус конкретного файла
git status README.md
Проверка статуса перед коммитом #
Хороший рабочий процесс перед каждым коммитом:
# Шаг 1: Посмотреть что изменено
git status
# Шаг 2: Просмотреть детали изменений
git diff # не в индексе
git diff --staged # в индексе
# Шаг 3: Добавить нужные файлы
git add src/main.js
git add README.md
# Шаг 4: Снова проверить что попадёт в коммит
git status
# Шаг 5: Закоммитить
git commit -m "Описание изменений"
Часто встречаемые ситуации #
Файл в обоих разделах:
Changes to be committed:
modified: src/auth.js
Changes not staged for commit:
modified: src/auth.js
Это значит: часть изменений добавлена через git add, после чего файл изменялся ещё раз. В коммит попадёт только та версия, которая была при git add.
Конфликты при merge:
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: src/config.js
Файл в состоянии конфликта — нужно разрешить конфликт и git add.
Проверка игнорируемых файлов #
# Показать также игнорируемые файлы
git status --ignored
# Вывод добавит раздел:
# Ignored files:
# node_modules/
# .env
# *.log
Часто задаваемые вопросы #
Какая разница между “Changes to be committed” и “Changes not staged”? Первое — файлы в staging area (index), которые попадут в следующий коммит. Второе — файлы изменены на диске, но git add ещё не был выполнен, они в коммит не попадут.
Как убрать файл из staging area? git restore --staged <file> или git reset HEAD <file> (старый синтаксис). Файл останется изменённым, просто не попадёт в коммит.
Что делать если git status показывает много изменений? Используйте -s для компактного вывода. Если нужно проверить что именно изменилось — git diff.
Как сделать git status быстрее в большом репозитории? git status -u no отключает показ untracked файлов. Также помогает наличие .gitignore для исключения большого числа файлов.
Почему git status показывает изменения в файле, хотя я ничего не менял? Возможная причина — разные line endings (CRLF vs LF) или изменение прав доступа на файл. Проверьте настройку core.autocrlf и core.fileMode.
Заключение #
git status — это базовая команда для понимания текущего состояния репозитория. Запускайте её перед каждым git add и git commit. Для детального просмотра изменений используйте git diff. Для истории коммитов — git log.