git status
Узнайте, как работает git status, как читать длинный и короткий вывод, использовать --short, --branch и --porcelain, и что означает каждое состояние.

Команда git status отвечает на один неизменный вопрос во время работы: что изменилось с момента последнего коммита и что готово к фиксации? Это команда, которую вы используете чаще всего — перед добавлением в индекс, перед коммитом и каждый раз, когда теряете представление о состоянии файла. На этой странице объясняются три состояния, в которых может находиться файл, как читать длинный и короткий вывод, а также параметры, позволяющие использовать status в скриптах.
Что показывает git status
git status отображает состояние двух вещей: рабочего каталога (файлов на диске, которые вы редактируете) и области подготовки, также называемой индексом (снимка, который вы готовите для следующего коммита). Команда сообщает, какие файлы:
- Подготовлены (staged) — изменения, добавленные с помощью git add и готовые к следующему коммиту.
- Не подготовлены (modified) — отслеживаемые файлы, которые вы изменили, но ещё не добавили.
- Неотслеживаемые (untracked) — новые файлы, которые Git никогда не видел и не отслеживает.
git status не показывает историю коммитов. Она ничего не говорит о предыдущих коммитах, слитых ветках или о том, кто что изменил — для этого используйте git log. Она также не показывает содержимое изменений; чтобы увидеть конкретные добавленные и удалённые строки, используйте git diff. Иными словами, status суммирует эффект git add и git commit для текущих файлов.
Базовое использование
В наиболее распространённом виде команда не принимает аргументов:
git statusВ чистом репозитории, где нечего делать, Git сообщает об этом:
On branch master
nothing to commit, working tree cleanЧтение длинного вывода
Вывод по умолчанию (также доступный с флагом --long) — это подробный, удобочитаемый формат. Проследим за файлом на протяжении его жизненного цикла, чтобы увидеть каждый раздел.
Новый файл, который Git никогда не видел, является неотслеживаемым:
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
w3docs.txt
nothing added to commit but untracked files present (use "git add" to track)После git add w3docs.txt тот же файл перемещается в раздел Changes to be committed — теперь он подготовлен:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: w3docs.txtПосле git commit рабочее дерево снова чисто. Теперь отредактируем w3docs.txt и создадим второй файл new.txt. Отслеживаемый файл, который вы изменили, появляется в разделе Changes not staged for commit, а новый файл остаётся в разделе Untracked files:
On branch master
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: w3docs.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
new.txt
no changes added to commit (use "git add" and/or "git commit -a")Обратите внимание, что подсказки в скобках — это реальные, работоспособные предложения: Git на каждом шаге указывает, как отменить подготовку, отбросить изменения или добавить файл.
Короткий формат
Когда вы разобрались со значением разделов, длинный формат начинает казаться громоздким. Флаг -s (или --short) сжимает всё до одной строки на файл:
git status -sДля состояния выше (один изменённый отслеживаемый файл и один новый неотслеживаемый файл) вывод будет:
M w3docs.txt
?? new.txtКаждая запись имеет двухсимвольный код состояния. Левый столбец — это область подготовки (индекс), правый столбец — рабочее дерево:
| Код | Значение |
|---|---|
?? | Неотслеживаемый файл. |
A | Добавлен в область подготовки (новый файл подготовлен). |
M | Изменён. Слева — изменение подготовлено; справа — изменение не подготовлено. |
D | Удалён. |
R | Переименован. |
Пробел в начале означает «нет изменений в этом столбце». Таким образом, M означает изменён, но не подготовлен; M означает, что изменение подготовлено; MM означает подготовленное изменение плюс дополнительные неподготовленные правки того же файла.
Добавьте -b, чтобы также отображать текущую ветку и информацию об отслеживании:
git status -sb## master
M w3docs.txt
?? new.txtВывод для скриптов: --porcelain
Если вы хотите читать результат git status из скрипта, не разбирайте короткий или длинный формат — оба могут меняться между версиями Git и зависят от конфигурации пользователя. Вместо этого используйте --porcelain. Он гарантирует стабильный, машиночитаемый формат:
git status --porcelain M w3docs.txt
?? new.txtСтолбцы представляют собой те же двухсимвольные коды, что и в коротком формате, однако формат гарантированно стабилен, что делает его безопасным для хуков, проверок CI и приглашений командной строки. Используйте его совместно с -z, чтобы завершать каждую запись нулевым байтом вместо символа новой строки — это позволяет однозначно обрабатывать имена файлов, содержащие пробелы или символы новой строки.
Отображение игнорируемых файлов
По умолчанию git status скрывает файлы, соответствующие правилам .gitignore — артефакты сборки и бинарные файлы, такие как .pyc, .obj, .exe, или лог-файлы, иначе заглушили бы реальные изменения. Чтобы убедиться, что файл действительно игнорируется (а не просто забыт), добавьте --ignored:
git status --ignoredЕсли .gitignore содержит *.log, а на диске есть файл debug.log, появляется дополнительный раздел:
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
debug.logЭто самый быстрый способ отладить правило игнорирования, которое захватывает больше или меньше файлов, чем ожидалось.
Основные параметры
| Параметр | Описание |
|---|---|
-s, --short | Вывод в коротком формате: одна строка на файл. |
-b, --branch | Показать ветку и информацию об отслеживании (работает с коротким форматом). |
--porcelain | Вывод в стабильном, удобном для разбора формате для скриптов; игнорирует пользовательскую конфигурацию. |
--long | Вывод в длинном формате (по умолчанию). |
-u[<mode>], --untracked-files[=<mode>] | Управление неотслеживаемыми файлами: no — не показывать, normal — показывать файлы и каталоги, all — также перечислять файлы внутри неотслеживаемых каталогов. |
--ignored | Также показывать файлы, игнорируемые .gitignore. |
--ignore-submodules[=<when>] | Игнорировать изменения в субмодулях. <when> может быть none, untracked, dirty или all. |
-z | Завершать записи нулевым байтом (подразумевает --porcelain, если формат не задан). |
--column[=<options>], --no-column | Отображать неотслеживаемые файлы в столбцах. |
Почему стоит проверять статус часто
Хорошей практикой является запуск git status перед каждым git add и git commit. Быстрая проверка помогает избежать распространённых ошибок: фиксации файла, который вы забыли подготовить, случайного добавления отладочного файла в индекс или коммита не в ту ветку. Поскольку status только читает репозиторий и никогда ничего не изменяет, её запуск всегда безопасен.
После прочтения статуса естественными следующими шагами будут: изучить точные изменения с помощью git diff, отменить ошибку подготовки с помощью git reset, или, если вы ещё не начали, создать репозиторий с помощью git init.