git basic

git status

Показать состояние рабочего дерева и индекса относительно текущего коммита

Описание

git status — одна из наиболее часто используемых команд в повседневной работе. Она показывает три группы файлов: изменения, подготовленные к коммиту (staged — в индексе), изменения, НЕ подготовленные к коммиту (unstaged — в рабочем дереве), и неотслеживаемые файлы (untracked). Также отображается имя текущей ветки и отставание/опережение от remote.

Команда абсолютно безопасна — она ничего не изменяет, только читает состояние. Её стоит выполнять перед каждым git add и git commit, чтобы убедиться в корректности того, что войдёт в коммит. Многие разработчики добавляют git status как первую команду после cd в проект.

Для скриптов и утилит удобнее машиночитаемый вывод: --short (-s) или --porcelain. Эти форматы стабильны и не зависят от версии Git, в отличие от «обычного» человекочитаемого вывода.

Синтаксис

git status [ОПЦИИ] [--] [<путь>…]

Пример обычного вывода:

On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: src/auth.py Changes not staged for commit: (use "git add <file>..." to update what will be committed) modified: README.md Untracked files: (use "git add <file>..." to include in what will be committed) .env.local

Флаги и опции

ФлагОписание
-s / --shortКраткий вывод: двухбуквенный код состояния + имя файла. Первая буква — статус в индексе, вторая — в рабочем дереве. Удобен для быстрого обзора.
--porcelain[=v1|v2]Машиночитаемый формат, стабильный между версиями Git. v2 добавляет больше информации (ветки, upstream, переименования). Используйте в скриптах.
-b / --branchПоказать информацию о ветке и upstream в кратком формате (работает вместе с -s).
-u[<режим>] / --untracked-filesУправлять отображением неотслеживаемых файлов. Режимы: no (не показывать), normal (показывать директории), all (показывать все файлы в директориях).
--ignored[=<режим>]Показать игнорируемые файлы. Режимы: traditional (по умолчанию), no, matching.
--show-stashПоказать количество записей в stash.
-v / --verboseДополнительно показать staged изменения в виде diff. При двойном -vv — также unstaged diff.
--ahead-behindВычислить и показать количество коммитов впереди и позади upstream (поведение по умолчанию).
--no-ahead-behindНе вычислять опережение/отставание от upstream. Ускоряет команду в больших репозиториях.
--column[=<параметры>]Выводить неотслеживаемые файлы в несколько колонок.

Коды состояния в кратком формате (-s)

КодЗначение
MModified — изменён
AAdded — добавлен в индекс (новый файл)
DDeleted — удалён
RRenamed — переименован
CCopied — скопирован
UUpdated but unmerged — конфликт слияния
?Untracked — неотслеживаемый файл
!Ignored — игнорируемый файл

Паттерны использования

Быстрая проверка перед коммитом

# Полный вывод
git status

# Краткий — для быстрого взгляда
git status -s

# Краткий с информацией о ветке
git status -sb

Использование в скриптах

# Проверить, есть ли изменения (porcelain)
if [ -n "$(git status --porcelain)" ]; then
    echo "Есть незакоммиченные изменения"
    exit 1
fi

# Только staged изменения
git status --porcelain | grep '^[MADRCU]'

Показать игнорируемые файлы

# Найти все игнорируемые файлы
git status --ignored

# Краткий формат с игнорируемыми
git status -s --ignored

# Проверить, игнорируется ли конкретный файл
git check-ignore -v .env

Статус только части проекта

# Проверить только директорию src/
git status src/

# Проверить конкретный файл
git status README.md

# Статус с подробным diff
git status -v

Советы и подводные камни

Совет: настройте короткий алиас
git status — самая частая команда. Создайте алиас:
git config --global alias.st "status -sb"
Теперь git st выводит краткий статус с информацией о ветке. Экономит время и снижает «усталость» от длинных выводов.
Совет: --porcelain=v2 для надёжных скриптов
В автоматизации используйте git status --porcelain=v2 — этот формат стабилен и не изменится в будущих версиях Git. Он содержит больше информации: OID (хеш) файла, точные renamed-from/to пути, информацию о субмодулях.
Внимание: git status не показывает содержимое изменений
git status только перечисляет изменённые файлы, но не показывает что именно изменилось. Для просмотра содержимого изменений используйте git diff (unstaged) и git diff --cached (staged). Флаг -v добавит diff прямо в вывод статуса.