# git status _Ежедневная работа · GitLab Knowledge Base_ **TL;DR:** Показывает разницу между тремя зонами Git: что изменено в рабочем дереве, что застейджено в индексе, какая ветка активна. Самая безвредная команда - ничего не меняет, можно жать сколько хочешь. `git status` - твоё «где я» в Git. Без неё работа сводится к гаданию. Запускать каждый раз перед `add` и `commit`, и после переключения ветки. ## Что показывает Несколько разделов сверху вниз: 1. **Текущая ветка и её положение относительно remote**: `On branch main`, `Your branch is ahead of 'origin/main' by 2 commits`. 2. **Changes to be committed** - то, что в индексе и пойдёт в следующий коммит (зелёный цвет). 3. **Changes not staged for commit** - изменённые отслеживаемые файлы, которые ещё не в индексе (красный). 4. **Untracked files** - новые файлы, которые Git не отслеживает (красный). Каждый раздел подсказывает следующую команду: «use `git add` to stage», «use `git restore` to discard». ## Короткий формат Подробный вывод полезен новичку. Для повседневной работы быстрее читается `-s` (short): ```bash git status -s # M README.md ← застейджено: modified # MM src/api.ts ← застейджено и ещё раз изменено # M src/index.ts ← модифицировано, но не застейджено # ?? newfile.txt ← untracked # A added.ts ← новый, застейджен # D deleted.ts ← удалён, застейджен ``` Два символа: левый - состояние в индексе, правый - в рабочем дереве. Понимая эти символы, читаешь статус мгновенно. ## Branch + ahead/behind `git status -sb` добавляет в верх строку с веткой и отставанием от remote: ``` ## main...origin/main [ahead 2, behind 1] ``` Это значит: у тебя 2 локальных коммита, которых нет в origin, и в origin есть 1 коммит, которого нет у тебя. Нужно либо merge либо rebase, прежде чем push. ## Подводные камни - На больших репозиториях `status` может работать медленно. Если тормозит - `git update-index --refresh` или включить `feature.manyFiles`/`core.fsmonitor` в конфиге. - `git status` не показывает stash. Чтобы увидеть припрятанное - `git stash list`. - Если файл в `.gitignore` - `status` про него молчит. Чтобы проверить, почему файл игнорируется - `git check-ignore -v file`. ## Команды ```bash git status ``` Полный человекочитаемый отчёт ```bash git status -s ``` Короткий машиночитаемый формат, две колонки символов ```bash git status -sb ``` Короткий + строка с веткой и отставанием от remote ```bash git status --porcelain=v1 ``` Зафиксированный формат для скриптов ## См. также - [git add](/courses/git/kb/add.md) - [git commit](/courses/git/kb/commit-cmd.md) - [git log](/courses/git/kb/log.md)