W3docs

git status

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

gitstatus

Команда 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.

Практика

Практика
Какую информацию предоставляет команда 'git status'?
Какую информацию предоставляет команда 'git status'?
Was this page helpful?