git status
Показать состояние рабочего дерева и индекса относительно текущего коммита
Описание
git status — одна из наиболее часто используемых команд в повседневной работе. Она показывает три группы файлов: изменения, подготовленные к коммиту (staged — в индексе), изменения, НЕ подготовленные к коммиту (unstaged — в рабочем дереве), и неотслеживаемые файлы (untracked). Также отображается имя текущей ветки и отставание/опережение от remote.
Команда абсолютно безопасна — она ничего не изменяет, только читает состояние. Её стоит выполнять перед каждым git add и git commit, чтобы убедиться в корректности того, что войдёт в коммит. Многие разработчики добавляют git status как первую команду после cd в проект.
Для скриптов и утилит удобнее машиночитаемый вывод: --short (-s) или --porcelain. Эти форматы стабильны и не зависят от версии Git, в отличие от «обычного» человекочитаемого вывода.
Синтаксис
- <путь> — ограничить вывод только указанными файлами или директориями.
Пример обычного вывода:
Флаги и опции
| Флаг | Описание |
|---|---|
-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)
| Код | Значение |
|---|---|
M | Modified — изменён |
A | Added — добавлен в индекс (новый файл) |
D | Deleted — удалён |
R | Renamed — переименован |
C | Copied — скопирован |
U | Updated 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 выводит краткий статус с информацией о ветке. Экономит время и снижает «усталость» от длинных выводов.
В автоматизации используйте
git status --porcelain=v2 — этот формат стабилен и не изменится в будущих версиях Git. Он содержит больше информации: OID (хеш) файла, точные renamed-from/to пути, информацию о субмодулях.
git status только перечисляет изменённые файлы, но не показывает что именно изменилось. Для просмотра содержимого изменений используйте git diff (unstaged) и git diff --cached (staged). Флаг -v добавит diff прямо в вывод статуса.